2013-07-02 5 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

Nice 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

It скомпилированный ранее, но бросил эту ошибку, когда он пытался запустить. Он работает сейчас. Я не вижу разницы между первой и второй строками кода, разве они не должны делать то же самое? – RX14

+1

@ RX14 .. использование опции Strict On .. – matzone

+0

@ RX14 согласно документации и Convert.ToString() и Object.ToString() делают то же самое. – bansi

Смежные вопросы