2013-02-13 4 views
1

У меня есть элемент управления Listview в приложении C#, заполненный некоторыми именами и флажками, чтобы выбрать одно или несколько значений. Помимо нажатия на флажки, пользователь может также щелкнуть по имени, и он станет синим. Я хочу сохранить эту функциональность, так как щелчок по названию показывает еще несколько данных и щелчок на флажках маркирует ее для дальнейшей обработки.Проверенные элементы в C# Listview

Я полагал, что нажатие на изменения флажка свойство 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

+0

Надеюсь, что N не 1 b4 u r попадает в петлю :) – Igoy

+1

@Yogendra: Пожалуйста, используйте правильное написание. Мы здесь не в чате. –

ответ

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

'ListView' с событием' ItemChecked' является 'Winforms' поэтому никакой «ViewState» не был задействован :) – gzaxx

Смежные вопросы