Перетаскивание элемента по вертикали, позиция Y не работает - PullRequest
1 голос
/ 23 декабря 2011

У меня есть картинка, которая отображает изображение музыкальной ноты.Я хочу иметь возможность изменять значение высоты тона при перетаскивании его вверх и вниз внутри панели, в которой оно находится, в соответствии с соответствующей позицией Y того места, куда он упал.Используя приведенный ниже код, высота тона действительно меняется, но кажется, что значение Y просто случайное, когда оно должно увеличиваться, чем выше я перетаскиваю, и вниз, тем ниже я перетаскиваю.

1 Ответ

1 голос
/ 23 декабря 2011

При изменении положения элемента управления (путем изменения this.Top) координаты мыши, возвращаемые с помощью MouseEventArgs, также изменяются. Вместо использования параметра e следует использовать Cursor.Position, чтобы получить абсолютные (экранные) координаты , а затем преобразовать их, используя PointToClient метод вашего родительского контроля. Таким образом, ваши координаты не будут зависеть от положения вашего элемента управления.

Чтобы лучше понять, что происходит, прежде чем делать все это, добавьте две метки в вашу форму и добавьте что-то подобное в ваш NoteDrag метод:

// show relative coordinate 
this.label1.Text = e.Y.ToString();

// show absolute coordinate 
this.label2.Text = Cursor.Position.Y.ToString();
...