none
VB2008 第一個可能發生的例外狀況類型 RRS feed

解答

  • 好奇一問,是小弟表達能力不好還是您完全沒有寫程式基礎@@
    Public Class Form1
    
    
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        TextBox2.Text = "http://hk.yahoo.com"
        WebBrowser1.Navigate(TextBox2.Text)
    
      End Sub
    
      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Timer1.Enabled = True
        Try
    
          WebBrowser1.Navigate(TextBox2.Text)
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
    
        Catch ex As Exception
          MessageBox.Show(ex.ToString())
        End Try
    
    
        Timer2.Enabled = True
        Timer2.Interval = 5000
    
       
       
      End Sub
    
      Dim second = 0
      Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        second = second + 1
    
        If second Mod 10 = 0 Then
          Button1.Enabled = True
          Timer1.Enabled = False
          second = 0
    
        End If
    
      End Sub
    
      
      Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        Try
          WebBrowser1.Navigate(TextBox2.Text)
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
          Dim p = WebBrowser1.Document.GetElementById("p")
          Dim searchsubmit = WebBrowser1.Document.GetElementById("searchsubmit")
          If p Is Nothing Or searchsubmit Is Nothing Then '加在這裡,沒有p或沒有searchsubmit
            WebBrowser1.Navigate(TextBox2.Text)
          Else
            p.SetAttribute("value", TextBox1.Text)
            searchsubmit.InvokeMember("click")
          End If
    
        Catch ex As Exception
    
        End Try
      
      End Sub
    End Class
    
    


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    • 已標示為解答 手指 2011年8月4日 下午 01:15
    2011年8月3日 下午 12:43

所有回覆

  • Hi:

    可以請問您是做了什麼操作才出現那個例外?

    我照著上面的程式碼玩了一下,沒有您說的問題(我使用.net 4 WinForm VB)


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月2日 下午 03:03
  • 1. 用Search Engine 找一下 System.NullReferenceException

    2. 用F8 逐步執行 確認是哪一行跳出 錯誤

    這些動作 應該是你自己就可以處理的

    不要一有問題 就丟到論壇

    請自行嘗試解決

    你這樣 只會逐漸讓網友們不想回覆你的問題


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年8月2日 下午 03:10
  • 你有按Button1?

    你連續按下去Button1

    就會有問題出現

    2011年8月2日 下午 03:15
  • 我有SEARCH過..但是沒有我要的

    我真是沒有辦法了

    2011年8月2日 下午 03:23
  •     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
                WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
                WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
             End Try
        End Sub

    你最大的問題是, 總是抄了兩行程式就貼上去以為自己會了,然後不肯用心花點時間回頭看看些程式碼真正的意義, 所以總是看到你發問一樣的問題, 一直不斷地重覆.

    用WebBrowser的原理是, 當WebBrowser.Navigate時程式並不會暫止到頁面下載完成才跳下一行程式, 用你的程式碼就會發生頁面沒有載完卻開始抓HtmlElement的情形. 才會出現 Nullrefrence.

    寫程式不是光抄一抄就會了, 要花時間查資料, 要想, 你家附近有沒有電腦補習班 ? 去找一間上課吧, 你的基本功還太虛弱.

    還有啊, 你還在學習階段, Catch後就把例外訊息給顯示出來吧, 不然你連錯在哪都搞不清楚



    2011年8月2日 下午 03:23
  • 你有按Button1?

    你連續按下去Button1

    就會有問題出現


    我快速地連續按Button1只出現過一次WebBroswer1發生例外

    如果要避免連續按Button1造成問題的話

     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    
       If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
    
       Try
    
        WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
        WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("Click")
    
       Catch ex As Exception
       WebBrowser1.Navigate("http://hk.yahoo.com/")
       While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    
         Application.DoEvents()
       End While
    
       End Try
    
      End If
    
      
    
     End Sub
    
    

     

    試試看在Button1_Click時,WebBrowser1載入完網頁才去處理,算是一種防呆寫法
    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月2日 下午 03:25
  • 嗯嗯,多謝指點

    但是..都是有問題出現

    請你看一看,連續按下去Button1,就會有錯誤

    圖片網址:http://upload.lsforum.net/users/public/x50889RWo125.jpg

    講多多指點

     

     

    2011年8月2日 下午 03:42
  • 不停連續按下去Button1 ,,都是會出現錯誤
    2011年8月2日 下午 03:53
  • 加了  If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then 防呆也會嗎?


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月2日 下午 03:59
  • 也會
    我真是想不到辦法了
    2011年8月2日 下午 04:00
  •  Private Sub Form2_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
            Try
                RemoveHandler Button1.Click, AddressOf Button1_Click
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
                WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
                WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
                AddHandler Button1.Click, AddressOf Button1_Click
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
            End Try
        End Sub
    那就讓Button1在完成動作前不給按.
    2011年8月2日 下午 04:01
  • 但是您給的網址:http://upload.lsforum.net/users/public/x50889RWo125.jpg

    我沒看到 If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then 這句話耶?


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月2日 下午 04:02
  • 我剛才想到一個事情, 樓主應該是香港人吧?

    所以香港這邊的論壇應該和你語言比較通.

    http://social.microsoft.com/Forums/zh-HK/categories

    2011年8月2日 下午 04:17
  • 如果放在Timer1?

    問題沒有解決= =

    2011年8月2日 下午 04:22
  • 如果我放在Timer1

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Try
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
                WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
                WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
            End Try
        End Sub

    問題沒有解決= =
    2011年8月2日 下午 04:29
  • 你有試過 WebDocument 的 OnDocumentCompleted 事件嗎???

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年8月2日 下午 04:29
  • 都是一樣

    2011年8月2日 下午 04:34
  • 如果我放在Timer1

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Try
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
                WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
                WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
            End Try
        End Sub

    問題沒有解決= =


    你知道Forms.Timer的特性嗎 ? 如果tick委派函式的事情沒做完, 下一個tick就來, 它會堆疊住, 先做下一個Tick的事情.

    只要你做的事情會超過你設定的Interval, 它就會一直無法完成工作, 那你覺得這樣有意義嗎 ?

    先把Interval放長一點吧. 不然就算這程式碼不會出錯也是個廢物.

    我要不客氣的說, 你根本沒在聽我們勸你要從基本開始練起的話, 就一直不斷的在重覆同樣的問題.

    2011年8月2日 下午 04:40
  • Public Class Form1
      Dim yahooHomePage As Uri = New Uri("http://hk.yahoo.com")
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Navigate(yahooHomePage)
      End Sub
    
      Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        If (e.Url = yahooHomePage) Then
          WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
          WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
        End If
      End Sub
    End Class
    
    

    至少我連點之後 是沒有NullReferenceException產生
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年8月2日 下午 04:41
  • 嗯嗯~不過會出現指今碼發生錯誤

    網址圖片:http://upload.lsforum.net/users/public/x13067RWs199.jpg

    另外,如果我要不停重覆,我可以怎樣做?

    是不是放在Timer1?



    2011年8月2日 下午 04:47
  • 先在畫面上放一個Timer控制項

    然後

      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://hk.yahoo.com/")
        Timer1.Interval = 1000
      End Sub
    
      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Timer1.Enabled = True
        Try
          RemoveHandler Button1.Click, AddressOf Button1_Click
          WebBrowser1.Navigate("http://hk.yahoo.com")
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
          WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
          WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
          AddHandler Button1.Click, AddressOf Button1_Click
        Catch ex As Exception
          MessageBox.Show(ex.ToString())
        End Try
       
      End Sub
    
      Dim second = 0
      Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        second = second + 1
    
        If second Mod 5 = 0 Then
          Button1.Enabled = True
          Timer1.Enabled = False
          second = 0
    
        End If
    
      End Sub
    

     

    按下Button1後,經過5秒鐘後Button1才能再點擊,這樣就能防止User連續點擊按鈕了。
    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月2日 下午 04:54
  • 如果我放在Timer1

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Try
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
                WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
                WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
                WebBrowser1.Navigate("http://hk.yahoo.com")
                While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
            End Try
        End Sub

    問題沒有解決= =


    你知道Forms.Timer的特性嗎 ? 如果tick委派函式的事情沒做完, 下一個tick就來, 它會堆疊住, 先做下一個Tick的事情.

    只要你做的事情會超過你設定的Interval, 它就會一直無法完成工作, 那你覺得這樣有意義嗎 ?

    先把Interval放長一點吧. 不然就算這程式碼不會出錯也是個廢物.

    我要不客氣的說, 你根本沒在聽我們勸你要從基本開始練起的話, 就一直不斷的在重覆同樣的問題.

    我知道Forms.Timer的特性,有沒有方法它不會堆疊住,完成一個一個工作
    2011年8月2日 下午 04:56
  • 可以請你先解釋

    這樣做的目的是甚麼?

    為什麼要對同一個資料不停的search?

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年8月2日 下午 04:58
  • 嗯嗯~你的指教,我明白了多一些了

    如果要不斷自動重復?

    2011年8月2日 下午 05:00
  • 是~不停search
    我想看到最新的資訊
    2011年8月2日 下午 05:03
  •  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        TextBox2.Text = "http://hk.yahoo.com"
        WebBrowser1.Navigate(TextBox2.Text)
    
      End Sub
    
      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Timer1.Enabled = True
        Try
    
          WebBrowser1.Navigate(TextBox2.Text)
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
    
        Catch ex As Exception
          MessageBox.Show(ex.ToString())
        End Try
    
    
        Timer2.Enabled = True
        Timer2.Interval = 5000
    
       
       
      End Sub
    
      Dim second = 0
      Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        second = second + 1
    
        If second Mod 10 = 0 Then
          Button1.Enabled = True
          Timer1.Enabled = False
          second = 0
    
        End If
    
      End Sub
    
      
      Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        Try
          WebBrowser1.Navigate(TextBox2.Text)
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
          WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
          WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")
        Catch ex As Exception
    
        End Try
      
      End Sub
    


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月2日 下午 05:31
  • 我知道Forms.Timer的特性,有沒有方法它不會堆疊住,完成一個一個工作


    你知道還這樣寫 ? 而且既然你什麼都知道, 何必來發問 ?
    2011年8月3日 上午 01:54
  • 我在測試^^

    2011年8月3日 上午 11:22
  • 我有很多地方不知道= =
    2011年8月3日 上午 11:22
  • 我想問一問,出現網頁的指令碼發生錯誤的原因是啥?

    可以說多一點?

    網址圖片:http://upload.lsforum.net/users/public/x13067RWs199.jpg

    2011年8月3日 上午 11:26
  • 我想問一問,出現網頁的指令碼發生錯誤的原因是啥?

    可以說多一點?

    網址圖片:http://upload.lsforum.net/users/public/x13067RWs199.jpg


    因為javascript發生錯誤:'YUS'(這個字串)是null或不是一個物件
    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月3日 上午 11:40
  • WebBrowser1.Document.GetElementById("p").SetAttribute("value", TextBox1.Text)
    WebBrowser1.Document.GetElementById("searchsubmit").InvokeMember("click")

    如果網頁中的("p") 和("searchsubmit")不見了,程式就會出錯,因為找不到("p") 和("searchsubmit")

    我的想法是,確定網頁中有("p") 和("searchsubmit"),如果沒有("p") 和("searchsubmit"),就重新到WebBrowser1.Navigate(TextBox2.Text)


    可以的嗎?
    2011年8月3日 上午 11:50
  • 那加個if防呆就可以了

          Dim p = WebBrowser1.Document.GetElementById("p")
          Dim searchsubmit = WebBrowser1.Document.GetElementById("searchsubmit")
          If p Is Nothing Or searchsubmit Is Nothing Then '沒有p或沒有searchsubmit
            WebBrowser1.Navigate(TextBox2.Text)
          Else
            p.SetAttribute("value", TextBox1.Text)
            searchsubmit.InvokeMember("click")
          End If
    

     


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月3日 下午 12:08
  • 加在啥地方?

    我不知道= =

    剛剛測試了,都不行

    2011年8月3日 下午 12:17
  • 好奇一問,是小弟表達能力不好還是您完全沒有寫程式基礎@@
    Public Class Form1
    
    
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        TextBox2.Text = "http://hk.yahoo.com"
        WebBrowser1.Navigate(TextBox2.Text)
    
      End Sub
    
      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Timer1.Enabled = True
        Try
    
          WebBrowser1.Navigate(TextBox2.Text)
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
    
        Catch ex As Exception
          MessageBox.Show(ex.ToString())
        End Try
    
    
        Timer2.Enabled = True
        Timer2.Interval = 5000
    
       
       
      End Sub
    
      Dim second = 0
      Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        second = second + 1
    
        If second Mod 10 = 0 Then
          Button1.Enabled = True
          Timer1.Enabled = False
          second = 0
    
        End If
    
      End Sub
    
      
      Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        Try
          WebBrowser1.Navigate(TextBox2.Text)
          While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
          End While
          Dim p = WebBrowser1.Document.GetElementById("p")
          Dim searchsubmit = WebBrowser1.Document.GetElementById("searchsubmit")
          If p Is Nothing Or searchsubmit Is Nothing Then '加在這裡,沒有p或沒有searchsubmit
            WebBrowser1.Navigate(TextBox2.Text)
          Else
            p.SetAttribute("value", TextBox1.Text)
            searchsubmit.InvokeMember("click")
          End If
    
        Catch ex As Exception
    
        End Try
      
      End Sub
    End Class
    
    


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    • 已標示為解答 手指 2011年8月4日 下午 01:15
    2011年8月3日 下午 12:43
  • 我只有一點點的寫程式基礎@@
    2011年8月3日 下午 12:46
  • 我簡單說,現在的程式碼是不是按Button1,Timer2等待5秒,然後輸入 TextBox1的文字到網頁中?

    如果是

    可不可以按Button1,輸入 TextBox1的文字到網頁中,然後Timer2等待5秒





    2011年8月3日 下午 01:29
  • 現在程式早已走第二條路

    人家還幫你寫每隔5秒再送出一次

    做免費做到這程度還要被嫌~

    2011年8月3日 下午 03:09
  • 我不是嫌= =

    2011年8月3日 下午 03:35