Avatar billede oasen Nybegynder
10. juli 2003 - 15:42 Der er 7 kommentarer og
2 løsninger

Object variable or With block variable not set.

Jeg er netop gået i gang med ASP.NET, og sidder og laver nogle små scripts. Men nedenstående kodestump bliver ved med at give ovenstående fejl. Hvorfor?

<script language="VB" runat="server">
Sub test(Sender As Object, E As EventArgs)
    Dim Brugernavn As Object
    Brugernavn = brugernavn.Text
    If Trim(Brugernavn) = "" Then
        status.Visible = True
        status.Text = "Angiv et brugernavn!"
    Else
        'Tjaa...
    End If
End Sub
</script>

<form runat="server" id="formular" visible="true">
<asp:TextBox id="brugernavn" runat="server"/><br>
<asp:Button onclick="test" Text="Submit" runat="server"/>
</form>
<asp:Label id="status" runat="server" visible="false"/>

Og hvad betyder "Sender As Object" og "E As EventArgs" egentlig?
Avatar billede cbp Nybegynder
10. juli 2003 - 15:50 #1
Brugernavn skal være en streng og ikke et object
Dim Brugernavn As Object
erstattes med:
Dim Brugernavn As String

Sender As Object er objektet som der sker et event på. Og E As EventArgs er ekstra informationer omkring eventet (Eks. koordinater for et museklik).
Avatar billede oasen Nybegynder
10. juli 2003 - 15:52 #2
Det skrev jeg også til at starte med, men så fik jeg følgende fejl:

Compiler Error Message: BC30456: 'Text' is not a member of 'String'.
Source Error:

Line 2:  Sub test(Sender As Object, E As EventArgs)
Line 3:      Dim Brugernavn As String
Line 4:      Brugernavn = brugernavn.Text
Avatar billede cbp Nybegynder
10. juli 2003 - 15:55 #3
Jeps, det er fordi både din lokale variabel og din textbox hedder det samme. Så tror VB at du refererer til den lokale variabel. Så hvis kalder din string noget andet end brugernavn vil det virke.
Avatar billede z42cool Nybegynder
10. juli 2003 - 15:57 #4
Hvis din TextBox hedder Brugernavn, så er det en dårlig ide også at have en lokal variabel der hedder brugernavn, prøv i stedet:

Sub test(Sender As Object, E As EventArgs)
    Dim inp As String 
    inp = Trim(brugernavn.Text)
    If inp = "" Then
        status.Visible = True
        status.Text = "Angiv et brugernavn!"
    Else
        'Tjaa...
    End If
End Sub
Avatar billede oasen Nybegynder
10. juli 2003 - 16:01 #5
Hmm... sikken en dum lille fejl...

Jeg har forresten lige et tillægsspørgsmål, hvis du gider.
Hvordan ser en funktion ud i .NET, og kan den kaldes fra alle steder i filen?
Ligesom i ASP måske:

Function test(Str1, Str2)
  test = str1 & str2
End Function
Avatar billede cbp Nybegynder
10. juli 2003 - 16:08 #6
Ovenstående funktion vil virke overalt i 'filen'. I .Net er der dog egentlig tale om klassen. Der findes forskellige niveauer for funktioner: Private angiver eks. at funktionen kun kan kaldes fra samme klasse og public betyder at funktionen kaldes fra alle klasser.

Private Function test(Str1, Str2)
  test = str1 & str2
End Function
Avatar billede oasen Nybegynder
10. juli 2003 - 16:13 #7
Fint, er der i ovenstående eksempel overhovedet nogen grund til at overføre værdien af inputfeltet til en variabel ligesom det oftest gøres i ASP?
Er det godt nok blot at skrive: (?)

Sub test(Sender As Object, E As EventArgs)
    If Trim(brugernavn.Text) = "" Then
        status.Visible = True
        status.Text = "Angiv et brugernavn!"
    Else
Avatar billede oasen Nybegynder
10. juli 2003 - 16:15 #8
Altså - gør det nogen forskel om man anvender brugernavn.Text eller en lokal variabel mange steder i en sub? Mht. performance...
Avatar billede oasen Nybegynder
11. juli 2003 - 06:24 #9
Skal lige prøve en ting...

a    b
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester