2011-12-27 89 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]); 
    } 

而這是工作得很好。

如果你有一些問題,你可以請在這裏發表您的代碼。