2016-07-17 10 views
-1

Ich versuche, meine erste HTML-Benutzeroberfläche mit Webbrowser-Komponente in VB.Net zu erstellen. Ich habe diesen Code Beispiel auf Microsoft-WebsiteWebbrowser-Steuerelement löst NullReferenceException beim Navigieren

https://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.document(v=vs.110).aspx gefunden:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ 
    Handles Me.Load 

     WebBrowser1.DocumentText = 
     "<html><body>Please enter your name:<br/>" & 
     "<input type='text' name='userName'/><br/>" & 
     "<a href='http://www.microsoft.com'>continue</a>" & 
     "</body></html>" 

    End Sub 

    Private Sub webBrowser1_Navigating(
    ByVal sender As Object, ByVal e As WebBrowserNavigatingEventArgs) _ 
    Handles WebBrowser1.Navigating 

     Dim document As System.Windows.Forms.HtmlDocument = 
     WebBrowser1.Document 
     If document IsNot Nothing And 
     document.All("userName") IsNot Nothing And 
     String.IsNullOrEmpty(
     document.All("userName").GetAttribute("value")) Then 

      e.Cancel = True 
      MsgBox("You must enter your name before you can navigate to " & 
      e.Url.ToString()) 
     End If 

    End Sub 

Wenn ich es auf die Probe gestellt auf, die meiste Zeit wirft Ausnahme ‚System.NullReferenceException‘ in diesem Teil des Codes:

If document IsNot Nothing And 
     document.All("userName") IsNot Nothing And 
     String.IsNullOrEmpty(
     document.All("userName").GetAttribute("value")) Then 

Manchmal funktioniert es, aber meistens funktioniert es überhaupt nicht. Irgendeine Idee, wie man das repariert? Ich bin sehr neu in .Net-Plattform und tut mir leid, wenn es Fehlbuchstabierungen gibt. Jede Hilfe wird geschätzt.

+0

ändern 'und' zu' AndAlso' ... Es ist ein Kurzschluss ... – Codexer

+0

Mögliche Duplikat [Was für eine Nullreferenceexception ist, und wie kann ich es beheben ?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Codexer

Antwort

-1

Wenn document nichts ist, dann generieren die anderen Klauseln der If-Anweisung Ausnahmen, weil Sie versuchen, auf Eigenschaften zuzugreifen, während documentNothing ist. Sie müssen den Code wie folgt umschreiben:

Dim document As System.Windows.Forms.HtmlDocument = WebBrowser1.Document 

If document IsNot Nothing Then 
    If document.All("userName") IsNot Nothing Then 
     If String.IsNullOrEmpty(document.All("userName").GetAttribute("value")) Then 
      e.Cancel = True 
      MsgBox("You must enter your name before you can navigate to " & 
      e.Url.ToString()) 
     End If 
    End If 
End If 
+0

Sein wirkliches Problem ist die Verwendung des 'And'-Operators. Ich denke, dies hätte angesprochen werden müssen, abgesehen von einer anderen Lösung, die *** nicht sein tatsächliches Problem angeht ***. Auch keine Notwendigkeit für all die verschachtelten if's, weil er nichts mit ihnen macht, sieht es überfüllt aus. – Codexer

+0

@Zaggler - Ich stimme nicht mit Ihrer unaufgeforderten Moderation. Meine Antwort behebt das Problem und ist so konzipiert, dass nur minimale Änderungen am ursprünglichen Code vorgenommen werden, damit das OP das Problem sehen kann. Es ist nicht die optimale Antwort, da ich seinen Code nicht komplett neu schreibe. Daher ist dein Downvote fehl am Platz, da die Antwort nicht "nicht nützlich" ist - es ist einfach nicht so nützlich, wie du es gerne hättest. Wenn Sie seinen Code tatsächlich ausgeführt haben, werden Sie feststellen, dass mein Vorschlag sein Problem im Rahmen seiner aktuellen Anwendung behebt. –

+0

Ich habe nicht gesagt, Ihre Lösung funktioniert nicht, es wäre in der Tat. Sein wirkliches Problem ist seine Verwendung des ternären Operators ... Ich hätte das erklärt, weil es klar ist, dass er nicht weiß ... – Codexer

Verwandte Themen