我有列表视图控件在哪里更改选择,我检查 - 如果选择的记录计数大于零,则只启用组框控件,否则保持禁用。因为,那些控件只与选定的记录相关。如果没有选择记录,则不应启用它。
以下是我的listview所选的已更改事件:
Private Sub lv_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lv.SelectedIndexChanged
If lv.SelectedItems.Count() > 0 Then
...
.
ResetifNorecordSelectedState(False)
Else
..
ResetifNorecordSelectedState(True)
End If
问题:每次用户更改记录选择时,控件将被禁用,然后按启用状态。这给用户带来了一些不方便的设计。
任何人都可以与我分享解决方案,或者我应该在这里更改什么来纠正这个问题。 ?
由于
答案 0 :(得分:2)
ListView在选择行和取消选择行时都会触发SelectedIndexChanged
。因此,单击一个新行会触发两个事件:一个用于取消选择旧行,另一个用于选择新行。
在SelectedIndexChanged事件中,安排另一个方法在空闲时运行,但请确保安排其中一个方法:
// If we haven't already scheduled an event, schedule it to be triggered
// By using idle time, we will wait until all select events for the same
// user action have finished before triggering the event.
if (!_hasIdleHandler) {
_hasIdleHandler = true;
Application.Idle += HandleDeferredSelectionChanged;
}
然后在你的HandleDeferredSelectionChanged
中,你可以工作:
private virtual void HandleDeferredSelectionChanged(object sender, EventArgs e) {
// Remove the handler before triggering the event
Application.Idle -= HandleDeferredSelectionChanged;
_hasIdleHandler = false;
// do your checking here
}
来自ObjectListView的这些想法已经解决了ListView
带来的许多问题。