gpt4 book ai didi

.net - 为什么在同一元素上的 mouseDown 事件触发后双击事件不触发?

转载 作者:行者123 更新时间:2023-12-04 01:35:16 24 4
gpt4 key购买 nike

我在控件上有一个 mousedown 事件和 click 事件。 mousedown 事件用于开始拖放操作。我使用的控件是 Dirlistbox。

 Private Sub Dir1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dir1.MouseDown

Dim lab As New Label
lab.Text = Dir1.DirList(Dir1.DirListIndex)
lab.DoDragDrop(lab, DragDropEffects.Copy)

End Sub

但是当我点击控件时,只有 mousedown 事件触发,click 事件不会触发。
如果我在 mousedown 事件中注释掉“lab.DoDragDrop(lab, DragDropEffects.Copy)”,则单击事件会触发。
当我点击控件时,我该怎么做才能同时触发 mousedown 和 click 事件?

最佳答案

这是设计使然。 MouseDown 事件捕获鼠标,Control.Capture 属性。内置的 MouseUp 事件处理程序检查鼠标是否仍然被捕获并且鼠标没有移动太远,然后触发 Click 事件。问题是调用 DoDragDrop() 会取消鼠标捕获。必须如此,因为现在使用鼠标事件来实现拖放操作。所以你永远不会得到 Click 或 DoubleClick 事件。

需要响应点击和拖放的控件是一个可用性问题。但是,它是可修复的,您需要做的是确保用户已将鼠标从原始鼠标向下位置移动到足够的位置,然后开始拖动。让你的代码看起来像这样:

Private MouseDownPos As Point

Private Sub Dir1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dir1.MouseDown
MouseDownPos = e.Location
End Sub

Private Sub Dir1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dir1.MouseMove
If e.Button And MouseButtons.Left = MouseButtons.Left Then
Dim dx = e.X - MouseDownPos.X
Dim dy = e.Y - MouseDownPos.Y
If Math.Abs(dx) >= SystemInformation.DoubleClickSize.Width OrElse _
Math.Abs(dy) >= SystemInformation.DoubleClickSize.Height Then
'' Start the drag here
''...
End If
End If
End Sub

关于.net - 为什么在同一元素上的 mouseDown 事件触发后双击事件不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14731304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com