use*_*357 1 .net vb.net listview winforms selectionchanged
我有列表视图控件,在更改选择时,我会检查 - 如果所选记录计数大于零,则仅启用组框控件,否则将其禁用。因为,这些控件仅与选定的记录相关。如果没有选择记录,则不应启用它。
以下是我的列表视图的选定更改事件:
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
Run Code Online (Sandbox Code Playgroud)
问题:每次用户更改记录选择时,控件都会被禁用并随后进入启用状态。这给用户带来了一些不方便的设计。
任何人都可以分享我的解决方案,或者我应该在这里更改什么来纠正这个问题。?
谢谢
SelectedIndexChanged当选择行和取消选择行时,ListView 都会触发。因此,单击新行会触发两个事件:一个用于取消选择旧行,另一个用于选择新行。
在 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;
}
Run Code Online (Sandbox Code Playgroud)
然后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
}
Run Code Online (Sandbox Code Playgroud)
这些来自ObjectListView的想法已经解决了您将遇到的许多问题ListView。
| 归档时间: |
|
| 查看次数: |
1574 次 |
| 最近记录: |