Winforms ListView ItemSelectionChanged激发的频率高于预期
这与归结为“取消选择”和“选择”事件的情况不同。我看到的不是每次选择改变两次,而是四次。简化代码:Winforms ListView ItemSelectionChanged激发的频率高于预期,winforms,listview,c++-cli,Winforms,Listview,C++ Cli,这与归结为“取消选择”和“选择”事件的情况不同。我看到的不是每次选择改变两次,而是四次。简化代码: System::Void myclass::handleSelectionChange(Object ^ sender, ListViewItemSelectionChangedEventArgs ^ args) { if(myListView->SelectedIndices->Count == 1) { // This also serves to filter out "
System::Void myclass::handleSelectionChange(Object ^ sender, ListViewItemSelectionChangedEventArgs ^ args) {
if(myListView->SelectedIndices->Count == 1) { // This also serves to filter out "deselect" events (MultiSelect = false)
if(myUnsavedChanges && myListView->SelectedIndices[0] != myPreviousSelection) { // No need for this bit if the newly-selected item is the "dirty" item
Windows::Forms::DialogResult response = MessageBox::Show("Save your changes?", "Unsaved changes", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Warning);
if(response == Windows::Forms::DialogResult::Cancel) {
// re-select the edited item
myListView->SelectedIndices->Clear();
myListView->SelectedIndices->Add(myPreviousSelection);
} else if(response == Windows::Forms::DialogResult::Yes) {
// save the changes, don't reselect the edited item
} else if(response == Windows::Forms::DialogResult::No) {
// let the changes be lost
}
}
}
}
当我在表单中进行更改后单击某个项目时,我收到了许多调试消息,清楚地显示了以下事件过程:
handleSelectionChange
通过取消选择“脏”项进入(和退出)handleSelectionChange
通过选择单击的项目进入消息框
,我单击“取消”handleSelectionChange
通过取消选择单击的项目进入(和退出)handleSelectionChange
通过选择“脏”项进入handleSelectionChange
再次取消选择“脏”项进入(和退出)handleSelectionChange
再次进入并选择单击的项目消息框
,我再次单击“取消”handleSelectionChange
再次取消选中所单击的项目后进入(和退出)handleSelectionChange
再次进入并选择“脏”项