1

1つ以上の値を選択するためのいくつかの名前とチェックボックスで満たされた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イベントを呼び出してテキストボックスのコンテンツを変更していました

4

3 に答える 3

5

ListViewコントロール内のチェックされた項目の数を取得するには、ListView.CheckedItems.Countプロパティを使用します。

例:

int numCheckedItems = myListView.CheckedItems.Count;

また

TextBox1.Text = myListView.CheckedItems.Count.ToString();
于 2013-02-13T13:29:39.610 に答える
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();
}
于 2013-02-13T13:29:53.913 に答える