检测多个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子键吗?
谢谢!
要使下面的代码工作,您需要一个名为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