2016-07-17 99 views
-1

我試圖用VB.Net中的Webbrowser組件構建我的第一個HTML UI。我發現在微軟網站上的這個代碼示例Web瀏覽器控件在導航時拋出NullReferenceException

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

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 

當我把它放在測試,大部分時間拋出異常「System.NullReferenceException」在這部分代碼:

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

有時它有效,但大多數情況下根本不起作用。任何想法如何解決這個問題?我對.Net平臺很陌生,如果有任何拼寫錯誤,我很抱歉。任何幫助表示讚賞。

+0

改變你'和''到... AndAlso'其短路... – Codexer

+0

的【什麼是一個NullReferenceException,以及如何修復它可能的複製?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Codexer

回答

-1

如果document什麼那麼If聲明的其他條款,因爲您試圖訪問屬性,而documentNothing會產生異常。你需要重寫這樣的代碼:

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

他真正的問題是使用'And'運算符。我認爲這應該已經解決,除了給出一個不同的解決方案,***沒有解決他的實際問題***。也不需要所有的嵌套if,因爲他沒有對他們做任何事情,它看起來很擁擠.... – Codexer

+0

@ Zaggler - 我不同意你的不請自來的適度。我的答案解決了他的問題,並且旨在通過對原始代碼進行最少編輯來實現,以便OP能夠看到問題。這不是最佳的答案,因爲我不是完全重寫他的代碼。所以你的downvote是錯誤的,因爲答案不是'沒有用' - 它只是沒有你想要的那麼有用。如果你真的運行了他的代碼,你會發現我的建議在他當前的應用範圍內解決了他的問題。 –

+0

我沒有說你的解決方案不起作用,它的確如此。他真正的問題是他使用三元操作符...我會解釋,因爲很明顯他不知道...... – Codexer