.NET ListView:更改选择后的事件

Lau*_*ent 5 .net listview winforms

在ListView控件上,我需要在选择更改后触发事件,但每个用户操作只需要一次.如果我只是使用SelectedIndexChanged,那么在大多数情况下该事件会触发两次(一次取消选择前一个元素时,如果选择了新元素则再触发一次),如果用户仅点击一次控件则该事件.

这两个事件迅速火一前一后,但我的计算选择的变化需要一定的时间(几乎是秒)时,所以它做了两次,减慢接口.

我想要做的只是每次用户动作做一次(在选择新元素之前做它没用)但是我无法知道事件是否只是一对中的第一个(为了跳过第一次计算)因为如果用户刚刚取消选择了所选元素,它将只触发一次.

我无法使用Click或MouseClick事件,因为如果用户在列表外部单击以删除选择,则根本不会触发这些事件.

谢谢你的帮助.

Lau*_*ent 6

这是我在 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)