检测多个 Keyup / Keydown 事件并停止在每个 C# / VB.Net 上触发代码

Detect multiple Keyup / Keydown events and stop code firing on each C# / VB.Net

我在 WinForms 上有一个 DataGridView,其中 Column(0) 显示了一长串日期。

按下键盘上的向上或向下箭头时,用户会更改所选日期并触发 keyup / keydown 事件。本次活动调用了一段代码,要求很高

触发的 keyup/keydown 代码及其对 'CreateLeagueTable'

的后续调用没有问题
Private Sub DGVresults_KeyUp(sender As Object, e As KeyEventArgs) Handles DGVresults.KeyUp

    Dim col1 As Integer, row1 as integer
    Dim NewDate As String

    If e.KeyCode = Keys.Left OrElse e.KeyCode = Keys.Right Then
        Exit Sub
    End If

    col1 = DGVresults.CurrentCell.ColumnIndex
    row1 = DGVresults.CurrentCell.RowIndex

    If Not (col1 <> 0) Then

        NewDate = DGVresults.Rows(row1).Cells(0).Value

        Call CreateLeagueTable(NewDate)

    End If

End Sub

但是,当用户按下向上/向下箭头时 'multiple times in quick sucession' keyup / keydown 事件也会被触发多次,我不希望这种情况发生。

如何防止 keyup/keydown 事件多次触发并且仅在用户登陆的最后一天发生?

假设用户快速按向下箭头 10 次以到达所需的日期。 KeyUp 事件也被触发 10 次,并且在这 10 次事件发生时用户等待。我只希望选择的最后一个单元格的日期关闭并被解雇。

你能用新的 keyup/keydown 覆盖 keyup/keydown sub 吗?

谢谢!

要使以下代码正常工作,您需要一个名为 Timer1 的 System.Windows.Forms.Timer(您可以通过将 "Timer" 拖动到表单设计器中的表单上来创建一个。

只要 DataGridView 中的当前选择发生变化,计时器就会以 2000(2 秒)的间隔重新启动。当计时器滴答作响时,计时器停止,您的代码为 运行.

Private Sub DGVresults_SelectionChanged(sender As Object, e As EventArgs) Handles DGVresults.SelectionChanged
    Timer1.Interval = 2000
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Timer1.Stop()
    Dim col1 As Integer = DataGridView1.CurrentCell.ColumnIndex
    Dim row1 As Integer = DataGridView1.CurrentCell.RowIndex

    If col1 = 0 Then CreateLeagueTable(CStr(DataGridView1.Rows(row1).Cells(0).Value))
End Sub

Sub CreateLeagueTable(dt As String)
    MessageBox.Show(dt) 'Your code replaces this
End Sub