2011-01-12 9 views
4

Zuerst möchte ich wissen, ob die Maus in einem Bereich ist. Dann möchte ich überprüfen, ob die Maus den linken Klick hält. Ich möchte überprüfen, solange die linke Taste gedrückt ist, und ich möchte die Mausposition verfolgen. Und schließlich, überprüfen Sie, wenn die linke Taste losgelassen wird.Wie kann ich Mausklick- und Drag-Ereignisse in VB.NET verfolgen?

Kurz gesagt, wo soll ich anfangen, Mausereignisse in meinem Formular zu verfolgen?

Antwort

4

Im Allgemeinen, wenn das Mouse-Down-Ereignis auftritt, müssten Sie die Maus erfassen. Dann erhalten Sie Mausbewegungsereignisse, selbst wenn die Maus den Bereich des Steuerelements verlässt, das die Maus erfasst hat. Sie können Deltas in den Mausbewegungsereignissen berechnen. Ein Ziehen würde auftreten, wenn das Delta zum ersten Mal einen systemdefinierten "Ziehbereich" überschreitet. Wenn das Mouse-Up-Ereignis empfangen wird, beenden Sie den Ziehvorgang.

Sehen Sie sich in Windows Forms die Ereignisse MouseDown, MouseMove und MouseUp in der Klasse Control an. Die MouseEventArgs enthalten die X/Y-Koordinaten. Um die Maus zu erfassen oder freizugeben, legen Sie die Capture-Eigenschaft auf true bzw. auf false fest. Wenn Sie die Maus nicht erfassen, erhalten Sie keine MouseMove- oder MouseUp-Ereignisse, wenn die Maus außerhalb der Grenzen des Steuerelements freigegeben wird.

Um die minimale "Entfernung" zu bestimmen, sollte sich die Maus bewegen können, bevor Sie die Ziehoperation starten. Sehen Sie sich die SystemInformation.DragSize-Eigenschaft an.

Hoffe, das hilft.

5

Dies ist ein einfacher Code für Drag erkennen oder

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 
0

Klicken Verständlicherweise dies ist alt, aber ich auf diesen Beitrag lief während der Suche, das Gleiche zu tun. Ich dachte, es könnte ein tatsächliches Ziehereignis geben, aber ich denke nicht. Hier ist, wie ich es gemacht habe.

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 

Die ContainerToolStripMenuItem ist von meinem Toolstrip, die einen Panel on-the-fly erstellt. MouseDragging ist Klassenstufe. Zieht wie ein Zauber. Verwenden Sie auch nicht Cursor.Position, da es die Position relativ zu Ihrem gesamten Fenster zurückgibt, nicht das Formular (oder welchen Container Sie auch haben).