Listview ItemSelectionChanged发射两次?

时间:2010-07-12 14:51:31

标签: c# winforms events .net-3.5 listview

我在C#中有一个带有ListView控件的Winforms应用程序。此ListView显示TO-DO项目列表,我使用'ItemSelectionChanged'事件来处理更新。

问题是每次尝试进行更新时,'ItemSelectionChanged'事件都会触发两次。

ItemSelectionChanged事件刷新表单以表示更新(即从列表中删除项目)。

有没有办法在刷新后禁用事件?

UPDATE1:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
    {   
        if (e.IsSelected)
        {                
            listView1.Items[e.ItemIndex].Remove();

            listView1.SelectedIndices.Clear();
            listView1.Focus();

            listView1.Update();
        }
        else
        {

        }

    }

4 个答案:

答案 0 :(得分:13)

是的,会发射两次。一次因为先前选择的项目未被选中,再次为新选择的项目。您只需要确保看到选择事件:

    private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
        if (e.IsSelected) {
            // Update form
            //...
        }
    }

答案 1 :(得分:0)

是的,只需在刷新开始时删除EventHandler,并在刷新完成后再次添加

// Remove handler
listView1.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged);

// Do refresh

// Add again
listView1.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged);

答案 2 :(得分:0)

我认为您需要手动取消选择处理程序末尾的项目。

listView1.SelectedItem = null;

答案 3 :(得分:-1)

试试这个:

private void ItemSelect()
{

        if(SelectedItem!=null)
            App.Current.MainPage.Navigation.PushAsync(new Pages.TLAccByCurrency(), true);
        _selectedItem = null;
}