How listview selection changed event work. It call

2020-04-20 21:03发布

I have list view control where on change of selection, I do check - if selected record count is greater then zero then only enable group box controls else keep it disable. Because, those are controls are related to selected record only. if no record selected then it should not be enable.

Following is my listview's selected changed event:

    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

Problem: On each time when user change the record selection then controls goes disabled and follow by enabled state. It makes some inconvenient design to user.

can any one share me solution or what should I change here to correct this issue. ?

Thanks

1条回答
Bombasti
2楼-- · 2020-04-20 21:56

ListView fires a SelectedIndexChanged both when rows are selected and when they are deselected. So clicking a new row fires two events: one for deselecting the old row, another for selecting the new row.

In your SelectedIndexChanged event, schedule another method to be run at idle time, but make sure to one schedule one of them:

// 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;
}

Then in your HandleDeferredSelectionChanged you can do you work:

private virtual void HandleDeferredSelectionChanged(object sender, EventArgs e) {
    // Remove the handler before triggering the event
    Application.Idle -= HandleDeferredSelectionChanged;
    _hasIdleHandler = false;

    // do your checking here
}

These ideas from ObjectListView which already solves many of the problems you are going to have with ListView.

查看更多
登录 后发表回答