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

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

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

Ответы [ 4 ]

5 голосов
/ 20 января 2012

Это простой код для обнаружения Drag или Click

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
4 голосов
/ 12 января 2011

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

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

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

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

0 голосов
/ 13 января 2016

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

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, поскольку он вернет позицию относительно всего окна, а не формы (или любого контейнера, в котором вы находитесь).

0 голосов
/ 12 января 2011

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

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

...