.net 如何使用鼠标拖动和移动winform

.net 如何使用鼠标拖动和移动winform,.net,vb.net,winforms,visual-studio-2010,mouse,.net,Vb.net,Winforms,Visual Studio 2010,Mouse,我知道如何通过添加以下代码来“拖放”winform Protected Overrides Sub WndProc(ByRef m As Message) If (((m.Msg = 163) And ClientRectangle.Contains(PointToClient(New Point(m.LParam.ToInt32)))) And (m.WParam.ToInt32 = 2)) Then m.WParam = CType(1, IntPtr) En

我知道如何通过添加以下代码来“拖放”winform

Protected Overrides Sub WndProc(ByRef m As Message)
    If (((m.Msg = 163) And ClientRectangle.Contains(PointToClient(New Point(m.LParam.ToInt32)))) And (m.WParam.ToInt32 = 2)) Then
        m.WParam = CType(1, IntPtr)
    End If
    MyBase.WndProc(m)
    If ((m.Msg = 132) And (m.Result.ToInt32 = 1)) Then
        m.Result = CType(2, IntPtr)
    End If
End Sub
但在将面板添加到winform后,我无法在该面板区域内“拖动并移动”winform。知道如何在面板中“拖动和移动”吗?我的意思是鼠标点、点击、按住并在面板内移动,winform将跟随鼠标移动,直到我释放鼠标按钮

更新:我的问题的解决方案。

'Add these to your form class
Private MouseIsDown As Boolean = False
Private MouseIsDownLoc As Point = Nothing

'This is the MouseMove event of your panel
Private Sub panel_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel3.MouseMove
    If e.Button = MouseButtons.Left Then
        If MouseIsDown = False Then
            MouseIsDown = True
            MouseIsDownLoc = New Point(e.X, e.Y)
        End If

        Me.Location = New Point(Me.Location.X + e.X - MouseIsDownLoc.X, Me.Location.Y + e.Y - MouseIsDownLoc.Y)
    End If
End Sub

'And the MouseUp event of your panel
Private Sub panel_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel3.MouseUp
    MouseIsDown = False
End Sub
编辑:更改为VB.NET-我真的需要开始阅读标签…

'Add these to your form class
Private MouseIsDown As Boolean = False
Private MouseIsDownLoc As Point = Nothing

'This is the MouseMove event of your panel
Private Sub panel_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel3.MouseMove
    If e.Button = MouseButtons.Left Then
        If MouseIsDown = False Then
            MouseIsDown = True
            MouseIsDownLoc = New Point(e.X, e.Y)
        End If

        Me.Location = New Point(Me.Location.X + e.X - MouseIsDownLoc.X, Me.Location.Y + e.Y - MouseIsDownLoc.Y)
    End If
End Sub

'And the MouseUp event of your panel
Private Sub panel_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel3.MouseUp
    MouseIsDown = False
End Sub

我的错。你的代码实际上是有效的。我只需要添加与我的面板名称匹配的Handles子句。谢谢!!!