使用鼠标拖动表单中的任何标签

时间:2013-10-11 15:38:04

标签: vb.net

我需要拖动我表单上的任何标签。

我正在使用此代码,问题是它只移动1个标签label1 我可以复制粘贴几次并且它可以正常工作,但是我使用代码在表单上添加新标签,而且代码看不到它们。

如何点击并拖动表单上的任何标签?

Public Class Form1
    Dim lbl As Label
    Dim Off As Point
    Private Sub obj1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles label1.MouseDown

        Off.X = MousePosition.X - sender.Left
        Off.Y = MousePosition.Y - sender.Top
    End Sub
    Private Sub obj1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles label1.MouseMove
        If e.Button = MouseButtons.Left Then
            sender.Left = MousePosition.X - Off.X
            sender.Top = MousePosition.Y - Off.Y
        End If
    End Sub
End Class

2 个答案:

答案 0 :(得分:1)

“我想拖动位于”

形式的任何标签

不是使用“Handles xxx.yyy”子句对处理程序进行硬连接,而是在Form的Load()事件中在运行时连接它们:

Public Class Form1

    Dim Off As Point

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        WireLabels(Me)
    End Sub

    Private Sub WireLabels(ByVal cont As Control)
        For Each ctl As Control In cont.Controls
            If TypeOf ctl Is Label Then
                AddHandler ctl.MouseDown, AddressOf obj1_MouseDown
                AddHandler ctl.MouseMove, AddressOf obj1_MouseMove
            ElseIf ctl.HasChildren Then
                WireLabels(ctl)
            End If
        Next
    End Sub

    Private Sub obj1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Off.X = MousePosition.X - sender.Left
        Off.Y = MousePosition.Y - sender.Top
    End Sub

    Private Sub obj1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Button = MouseButtons.Left Then
            sender.Left = MousePosition.X - Off.X
            sender.Top = MousePosition.Y - Off.Y
        End If
    End Sub

End Class

显然,您也可以将AddHandler用于在运行时创建的任何标签。

答案 1 :(得分:0)

将您的代码更改为:

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

    Off.X = MousePosition.X - sender.Left
    Off.Y = MousePosition.Y - sender.Top
End Sub
Private Sub obj1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) 
    If e.Button = MouseButtons.Left Then
        sender.Left = MousePosition.X - Off.X
        sender.Top = MousePosition.Y - Off.Y
    End If
End Sub

在你的表格载荷中有这个:

AddHandler label1.MouseDown, Addressof obj1_MouseDown
AddHandler label1.MouseMove, Addressof obj1_MouseMove

在您的标签创建代码中:

dim aLabel as label = new Label
AddHandler aLabel.MouseDown, Addressof obj1_MouseDown
AddHandler aLabel.MouseMove, Addressof obj1_MouseMove
...

您需要在创建对象后将其添加到对象中,否则表单不知道如何处理事件。