2011-12-27 72 views
1

我有一个ListView和一个按钮,从列表视图中删除项目。当他们没有选择任何项目时,该按钮需要被禁用,但是当它们被选中时被启用。我试过事件的不同组合,但无法找到一个正确禁用按钮...C# - ListView项选择队列

当我关闭按钮时,列表视图失去焦点,我不能因为要删除的项点击按钮,他们需要在列表视图之外单击。

我希望有人在Visual Studio中有更多的经验可以帮助我找到正确的listview事件组合,以根据是否启用和禁用按钮选择一个项目。

+0

的WinForms,WPF,MVC或Web表单? – ivowiblo 2011-12-27 08:00:27

+0

更新我觉得标签,但WinForms的 – mowwwalker 2011-12-27 08:01:39

+0

何时改变的项目? – ivowiblo 2011-12-27 08:05:40

回答

2

只需订阅事件ItemSelectionChanged这样的(例如,在构造函数):

listView1.ItemSelectionChanged += OnListViewItemSelectionChanged; 

而且在事件的方法启用/禁用喜欢你的按钮:

private void OnListViewItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) 
{ 
    button1.Enabled = (listView1.SelectedItems.Count > 0); 
} 
+0

我试过了,但是当我点击列表视图外的按钮,即使它带走了选择它不执行。 – mowwwalker 2011-12-27 08:13:33

+0

@Walkerneo:项目仍被选中,但选择不再显示。如果您希望显示选择内容,即使控件尚未获得焦点,也可以在构造函数中添加以下行:'listView1.HideSelection = false;'。 – Fischermaen 2011-12-27 08:15:44

+0

太棒了,谢谢。现在有什么办法摆脱那恼人的虚线边框?最后一个选择的项目,即使它没有被选中了。 – mowwwalker 2011-12-27 08:26:46

0

我只是测试一些代码要做到这一点:

private void Form1_Load(object sender, EventArgs e) 
    { 
     //Added some dummy items 
     for(int i=0; i<10; i++) 
      listView1.Items.Add("Item"+i.ToString()); 
     //Disable the button 
     button1.Enabled = false; 

    } 

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     button1.Enabled = (listView1.SelectedItems.Count > 0); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     listView1.Items.Remove(listView1.SelectedItems[0]); 
    } 

而这是工作得很好。

如果你有一些问题,你可以请在这里发表您的代码。