Как я могу отслеживать события щелчка мышью и перетаскивания в VB.NET?

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

Итак, вкратце, с чего мне начать для отслеживания событий мыши в моей форме?


person Voldemort    schedule 12.01.2011    source источник


Ответы (4)


Вообще говоря, когда происходит событие нажатия мыши, вам необходимо захватить мышь. Тогда вы будете получать события перемещения мыши, даже если мышь покидает область элемента управления, которая захватила мышь. Вы можете вычислить дельту в событиях перемещения мыши. Перетаскивание произойдет, когда дельта впервые превысит заданную системой «область перетаскивания». Когда получено событие «вверх», остановите операцию перетаскивания.

В Windows Forms просмотрите события MouseDown, MouseMove и MouseUp в классе Control. MouseEventArgs будет содержать координаты X / Y. Чтобы захватить или отпустить мышь, установите для свойства Capture значение true или false соответственно. Если вы не захватите мышь, вы не получите события MouseMove или MouseUp, если мышь будет выпущена за пределы элемента управления.

Наконец, чтобы определить минимальное «расстояние», на которое должно быть разрешено перемещение мыши до начала операции перетаскивания, посмотрите на свойство SystemInformation.DragSize.

Надеюсь это поможет.

person Josh    schedule 12.01.2011

Это простой код для обнаружения перетаскивания или щелчка

Public IsDragging As Boolean = False, IsClick As Boolean = False
Public StartPoint, FirstPoint, LastPoint As Point
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBook.Click
    If IsClick = True Then MsgBox("CLick")
End Sub

Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picBook.MouseDown
    StartPoint = picBook.PointToScreen(New Point(e.X, e.Y))
    FirstPoint = StartPoint
    IsDragging = True
End Sub

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picBook.MouseMove
    If IsDragging Then
        Dim EndPoint As Point = picBook.PointToScreen(New Point(e.X, e.Y))
        IsClick = False
        picBook.Left += (EndPoint.X - StartPoint.X)
        picBook.Top += (EndPoint.Y - StartPoint.Y)
        StartPoint = EndPoint
        LastPoint = EndPoint
    End If
End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picBook.MouseUp
    IsDragging = False
    If LastPoint = StartPoint Then IsClick = True Else IsClick = False
End Sub
person Mohsen Noori    schedule 20.01.2012

Понятно, что это старый, но я наткнулся на этот пост, пытаясь сделать то же самое. Я думал, что может быть реальное перетаскивание, но не думаю. Вот как я это сделал.

Private Sub ContainerToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ContainerToolStripMenuItem.Click
    Dim pnl As New Panel
    pnl.Size = New Size(160, 160)
    pnl.BackColor = Color.White
    AddHandler pnl.MouseDown, AddressOf Control_DragEnter
    AddHandler pnl.MouseUp, AddressOf Control_DragLeave
    AddHandler pnl.MouseMove, AddressOf Control_Move
    Me.Controls.Add(pnl)
End Sub

Private Sub Control_DragEnter(ByVal sender As Object, ByVal e As EventArgs)
    MouseDragging = True
End Sub

Private Sub Control_DragLeave(ByVal sender As Object, ByVal e As EventArgs)
    MouseDragging = False
End Sub

Private Sub Control_Move(ByVal sender As Object, ByVal e As EventArgs)
    If MouseDragging = True Then
        sender.Location = Me.PointToClient(Control.MousePosition)
    End If
End Sub

ContainerToolStripMenuItem взят из моего ToolStrip, который добавляет панель на лету. MouseDragging - это уровень класса. Тащит как шарм. Кроме того, не используйте Cursor.Position, поскольку он вернет позицию относительно всего вашего окна, а не формы (или любого другого контейнера, в котором вы находитесь).

person Tyler Montney    schedule 13.01.2016

Единственный способ сделать это - использовать javascript.

Эта статья объяснит вам это. http://luke.breuer.com/tutorial/javascript-drag-and-drop-tutorial.aspx

person trelston    schedule 12.01.2011
comment
Конечно, OP мог бы более четко объяснить, что он использует, но я не думаю, что он пытается сделать это в HTML. - person Josh; 12.01.2011