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

本文关键字:Net VB 代码 Keydown Keyup 事件 检测 | 更新日期: 2023-09-27 18:05:49

我在WinForms上有一个DataGridView,其中列(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

然而,当用户"多次快速连续"按上下箭头时,keyup/keydown事件也会多次触发,我不希望这种情况发生。

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

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

你可以用一个新的keyup/keydown键来覆盖一个keyup/keydown子键吗?

谢谢!

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

要使下面的代码工作,您需要一个名为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