winform ListView似乎没有一种简单的方法可以取消SelectedIndexChanged事件。我也没有看到SelectedIndexChanging事件。
代码是我的尝试。然而,高光消失了,我想知道我是否需要为选择着色或者是否有更好的取消方法。 _prevSelectedIndex是上次选择的索引。我希望亮点能够回到之前的选择。
lvSearchResults.SelectedIndexChanged -= new EventHandler(lvSearchResults_SelectedIndexChanged);
lvSearchResults.SelectedIndices.Clear();
lvSearchResults.SelectedIndices.Add(_prevSelectedIndex);
lvSearchResults.Items[_prevSelectedIndex].Selected = true;
lvSearchResults.SelectedIndexChanged += new EventHandler(lvSearchResults_SelectedIndexChanged);
答案 0 :(得分:0)
只要您关闭多重选择,就不必打电话
SelectedIndices.Clear() Selectedndices.Add(..)
以及:
Items[_prevSelectedIndex].Selected = true;
后者将完成相同的结果。
我相信你也在不断增加一系列事件处理程序。要删除事件处理程序,您必须存储委托的实例,然后删除该实例; -= new EventHandler(...)
不会删除处理程序。
答案 1 :(得分:0)
最简单的方法是在你不希望事件触发时设置一个布尔属性,你设置为true
。在SelectedIndexChange事件中,您将测试是否应该允许事件继续触发您返回的其他事件。检查我的代码。下面的代码表现相同。
//somewhere on top
private bool dontFireEvent = false;
//somewhere else
dontFireEvent = true;
treeView1.SelectedNode = treeView1.Nod.... bla bla //event won't fire
dontFireEvent = false;
//within the event code
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (!dontFireEvent)
ProcessLogin();
}