在WinForm ListView中取消SelectedIndexChanged

时间:2009-03-31 23:48:48

标签: winforms listview

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);

2 个答案:

答案 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();
    }