Lau*_*ent 5 .net listview winforms
在ListView控件上,我需要在选择更改后触发事件,但每个用户操作只需要一次.如果我只是使用SelectedIndexChanged,那么在大多数情况下该事件会触发两次(一次取消选择前一个元素时,如果选择了新元素则再触发一次),如果用户仅点击一次控件则该事件.
这两个事件迅速火一前一后,但我的计算选择的变化需要一定的时间(几乎是秒)时,所以它做了两次,减慢接口.
我想要做的只是每次用户动作做一次(在选择新元素之前做它没用)但是我无法知道事件是否只是一对中的第一个(为了跳过第一次计算)因为如果用户刚刚取消选择了所选元素,它将只触发一次.
我无法使用Click或MouseClick事件,因为如果用户在列表外部单击以删除选择,则根本不会触发这些事件.
谢谢你的帮助.
这是我在 VB.NET 中的解决方案,使用Grammarian建议的ObjectListView 中描述的技术:
Private idleHandlerSet As Boolean = False
Private Sub listview1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles listview1.SelectedIndexChanged
'' may fire more than once
If Not idleHandlerSet Then
idleHandlerSet = True
AddHandler Application.Idle, New EventHandler(AddressOf listview1_SelectionChanged)
End If
End Sub
Private Sub listview1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
'' will only fire once
idleHandlerSet = False
RemoveHandler Application.Idle, New EventHandler(AddressOf listview1_SelectionChanged)
DoSearch()
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4037 次 |
| 最近记录: |