检测多个 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
我在 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