我需要拖动我表单上的任何标签。
我正在使用此代码,问题是它只移动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
答案 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
...
您需要在创建对象后将其添加到对象中,否则表单不知道如何处理事件。