【问题标题】:Do While Loop Going Until Button State Has Changed在按钮状态改变之前执行 While 循环
【发布时间】:2015-10-09 19:43:13
【问题描述】:

我希望 Winforms 中的 MouseDown 事件能够执行一些代码,直到一定的秒数或 MouseUp 事件被触发

我想要这样的东西

Dim counter As Integer = 0
Do Until Button.Key IsNot MouseDown
    counter += 1
    If counter > 3
        Exit Do Loop
    End If
    Application.DoEvents()
Loop

现在我有它喜欢它

seconds = 0
m_mouseButtonIsNotDown = False
Do Until m_mouseButtonIsNotDown
   If e.Button = Windows.Forms.MouseButtons.Left Then
       seconds += 1
       If seconds > 5 Then
            m_mouseButtonIsNotDown = True
       End If
   End If
   Application.DoEvents()
Loop

我正在寻找的期望行为是,如果他们在一定数量的循环内松开按钮,以处理如果它只是一个简单的鼠标点击事件的代码。如果 mousedown 已保持超过 3 或 5 秒,则切换到拖放模式,以便他们可以将所需的行移动到另一个 datagridview。我曾尝试使用 Timer 和 StopWatch 类,但它也无法按照我的预期工作。如果我有 mouseclick 事件和 mousedown 事件,则它不起作用,因为 mousedown 在基本单击事件上执行。有任何想法吗?请记住,它不能依赖于 mouseUp 事件,因为拖放不能拥有它。

【问题讨论】:

  • 你为什么一直试图改变代码sn-p?它编译得很好,拥有可用的 HitTestInfo 对于其他用途可能很重要。
  • @HansPassant 它不会编译,除非你告诉你正在调光是什么。只是说 Dim hit = DataGridView1.HitTest(downPos.X, downPos.Y) 没有 As 子句不会编译
  • 每个人都使用 Option Infer On,这是默认设置。如有必要,请提出相关问题。
  • @HansPassant 对不起,我不知道 VB 有这个选项可以让它在你不需要 As 子句变量的地方。

标签: vb.net winforms


【解决方案1】:

从不,从不使用 DoEvents() 来解决问题。可以使计时器工作。但这不是正确的方法。当用户在按住左键的同时移动了足够多的鼠标时,您希望开始拖动。像这样:

Private downPos As Point

Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown
    downPos = e.Location
End Sub

Private Sub DataGridView1_MouseMove(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseMove
    If e.Button = MouseButtons.Left Then
        If Math.Abs(downPos.X - e.X) >= SystemInformation.DoubleClickSize.Width Or
           Math.Abs(downPos.Y - e.Y) >= SystemInformation.DoubleClickSize.Height Then
            Dim hit = DataGridView1.HitTest(downPos.X, downPos.Y)
            If hit.RowIndex >= 0 Then
                '' Start dragging row
                ''...
            End If
        End If
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 2014-01-21
    • 2021-07-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多