【发布时间】:2026-02-09 05:40:01
【问题描述】:
如果这是一个愚蠢的问题,请原谅我,但我没有经验,也没有找到这个问题的答案。
根据存储在数据表 (treedata) 中的数据,我在代码中的面板 (Form8.Panel1) 上放置标签:
For i = 0 To _tree.treedata.Rows.Count - 1
Dim tb As New Label
tb.Name = CStr(i)
tb.AutoSize = True
tb.MaximumSize = New Size(tb.Width, 70)
tb.MinimumSize = New Size(tb.Width, 0)
tb.Location = New Point(treedata.Rows(i)(11),treedata.Rows(i)(4))
AddHandler tb.MouseMove, AddressOf obj1_MouseMove
AddHandler tb.MouseDown, AddressOf obj1_MouseDown
Form8.Panel1.Controls.Add(tb)
Next
使用 MouseMove 事件,我想跟随鼠标在面板上拖动标签:
Private Sub obj1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = MouseButtons.Left Then
sender.Location = New Point(Form8.MousePosition.X, Form8.MousePosition.Y)
End If
End Sub
现在发生的情况是,当我单击一个标签并希望它跟随鼠标时,它首先“跳开”,意思是从鼠标的位置移动了很多,然后才跟随鼠标。有谁知道我必须改变什么才能避免标签的这种初始跳跃?
【问题讨论】:
-
MousePosition不是您想要的,您需要将这些坐标转换为控制坐标。 -
类似这样的东西:*.com/questions/28531058/…。关于
PointToClient的部分可能是最相关的。
标签: vb.net winforms drag-and-drop