如果我将listview组件放入windows窗体并向其添加以下代码SelectedIndexChanged
事件:
MessageBox.Show("Fired!");
foreach (int selectedIndex in listView1.SelectedIndices)
{
listView1.Items[selectedIndex].Selected = false;
listView1.Items[selectedIndex].Focused = false;
}
消息框将显示4次!那是为什么?
注意:我使用循环清除listview中的所选项目
答案 0 :(得分:1)
您不应更改SelectedIndexChanged
事件中的选择。更一般地说,您不应更改属性已更改的通知内的属性。
如果您需要更改属性以响应通知,请查看相应的*Changing
事件。不是通知事情已发生变化(事后发生),而是通知事情即将发生变化(事先发生)。在SelectedIndexChanging
事件中,您有几种不同的选项可以改变事件的过程:
e.Cancel
属性设置为true
,这样就可以了。它将取消该事件并阻止所选索引的更改。e.NewSelectedIndex
属性更改选择。只需将此属性设置为您要选择的项目的索引即可。如果你想清除ListView中的选定项目以响应其他一些事件(例如,点击"清除选择"按钮不属于在ListView或类似的上下文菜单项中,您根本不需要循环。只需清除控件的SelectedItems
集合:myListView.SelectedItems.Clear()
即可。同样,您无法在响应SelectedIndexChanged
事件时执行此操作,或者您会遇到触发大量通知的相同问题。
老实说,你在这里写的代码毫无意义。当用户尝试选择项目时,您为什么要清除所有选定的项目?如果您不想允许选择,请通过将其Enabled
属性设置为false
来停用该控件。