2013-07-02 41 views
0

我想寫的是需要找到一個鼠標點擊的X和Y的程序,所以我寫了這個小調試代碼寫作鼠標單擊X和Y安慰

Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick 

    Console.WriteLine(ToString(e.X) + "," + ToString(e.Y)) 

End Sub 

當我運行它,我得到錯誤An unhandled exception of type 'System.IndexOutOfRangeException' occurred in WindowsApplication1.exe我看不出我的代碼是錯誤的。

回答

2

尼斯VB.NET陷阱,誘導(),這意味着很多事情。在這種情況下,它是索引表達式。你實際上調用了窗體的ToString()方法,換句話說就是Me.ToString(),它返回一個像「WindowsApplication1.Form1」這樣的字符串。在字符串上使用(x)是有效的語法,它會返回位置x處的字符。當你將鼠標放在最左上角的時候,你會得到類似於W,W的東西:)但是移動鼠標就可以進入Kaboom!當您索引字符串中超出字符串長度的位置時。

修復用:

Console.WriteLine(e.X.ToString() + "," + e.Y.ToString()) 

或:

Console.WriteLine("{0},{1}", e.X, e.Y) 

或:

Console.WriteLine(e.Location) 

或更健全:

Label1.Text = e.Location.ToString() 
0

劑量它編譯? 更改線路

Console.WriteLine(ToString(e.X) + "," + ToString(e.Y)) 

Console.WriteLine(e.X.ToString() + "," + e.Y.ToString()) 
+0

它之前編譯過,但在嘗試運行時拋出該錯誤。它現在有效。我沒有看到第一行和第二行代碼之間的區別,他們是不是應該做同樣的事情? – RX14

+1

@ RX14 ..使用Option Strict On .. – matzone

+0

@ RX14根據文檔Convert.ToString()和Object.ToString()做同樣的事情。 – bansi

相關問題