Отправитель не обновляется в MouseMove, если удерживается перетаскивание или кнопка мыши - PullRequest
0 голосов
/ 10 сентября 2011

Я пытаюсь реализовать пользовательскую операцию перетаскивания для сортировки панелей.

Я назначаю объект переменной в событии MouseDown и отслеживаю его относительное положение, изучая событие MouseMove соседних панелей, когда перетаскиваю на них мышь.

Private Sub ThumbnailMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    _thumbnailMove = DirectCast(sender, Windows.Forms.Control)  ‘The object to move

End Sub

Проблема в том, что параметр Sender события MouseMove никогда не изменяется - он всегда возвращает объект, получивший событие MouseDown.

Private Sub ThumbnailMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    Console.WriteLine(sender.Name)  'Always returns the name of the _thumbnailToMove

End Sub

Почему аргумент Sender MouseMove не возвращает фактический объект, над которым в данный момент находится мышь?

1 Ответ

0 голосов
/ 10 сентября 2011

Чтобы переопределить это поведение, установите для свойства Control.Capure значение False.

Private Sub ThumbnailMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    DirectCast(sender, Windows.Forms.Control).Capture = False   'Don't capture the mouse
    _thumbnailMove = DirectCast(sender, Windows.Forms.Control)

End Sub

И теперь событие MouseMove возвращает фактический объект, над которым перемещается мышь!

...