2013-02-13 41 views
1

我有一個ListView控件在C#應用程序中填充了一些名稱和複選框以選擇一個或多個值。除了點擊複選框,用戶也可以點擊該名稱,它會變成藍色。我想保留這個功能,因爲點擊名稱顯示一些更多的數據,點擊複選框標記它進一步處理在C#中檢查項目列表視圖

我相信點擊複選框會改變Item.Checked屬性並單擊名稱更改Item.Selected但它似乎不那麼簡單。

我有一個統計檢查的項目代碼:

private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e) 
{ 
    foreach(ListViewItem Item in ListView1.Items) 
    { 
     if (Item != null) 
     { 
      if (Item.Checked == true) N++; 
     } 
    } 
    Textbox1.Text = N.ToString(); 
} 

當用戶點擊複選框有適當數量裏顯示,但是當他點擊名稱,檢查到的數量即使還有更多的複選框選中變爲1,這顯然是錯誤的。此外,當表單和控制負載,我得到我的N = 1,即使沒有複選框檢查。

我在做什麼錯?

編輯: 感謝您的快速反應和有用的提示!

而我剛剛發現我的問題是我的疏忽,因爲我忘記刪除舊代碼! :) 起初,我使用了多個選擇來拾取物品,然後我切換到複選框,但仍然是調用SelectionChanged事件和修改文本內容

+3

凡爲N初始化?在事件代碼中,N不會重置爲0來重新​​開始計數。 – dutzu 2013-02-13 13:26:15

+0

我希望N不是1 B4你進入循環:) – Igoy 2013-02-13 13:26:46

+1

@Yogendra:請使用正確的拼寫。我們不在這裏的腳本小子聊天。 – 2013-02-13 13:28:37

回答

5

朋友檢查項目的數量在ListView控制,使用ListView.CheckedItems.Count屬性。

例子:

int numCheckedItems = myListView.CheckedItems.Count; 

TextBox1.Text = myListView.CheckedItems.Count.ToString(); 
2

你不應該重複低谷的所有項目ItemCheckedEventArgs提供你需要的所有信息:

private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e) 
{ 
    ListViewItem item = e.Item as ListViewItem; 
    if (item != null) 
    { 
     if (item.Checked) 
     { 
      N++; 
     } 
     else 
     { 
      N--; 
     } 
    } 
    Textbox1.Text = N.ToString(); 
} 
+0

事件'ItemChecked'的'ListView'是'Winforms'所以沒有涉及'ViewState' :) – gzaxx 2013-02-13 13:33:29