2016-09-06 5 views
0

私は2つのグループを持つリストビューを持っています。アイテムをチェックすると2番目のグループに移動し、チェックを外すと最初のグループに戻ります。リストビュー内のチェック済みアイテムのグループを移動するC#

private void lstServices_ItemChecked(Object sender, ItemCheckedEventArgs e) 
{ 
    foreach (ListViewItem item in lstServices.Items) 
    { 
    if (item.Checked) 
    { 
     item.Group = lstServices.Groups[1]; 
    } 
    else 
    { 
     item.Group = lstServices.Groups[0]; 
    } 
    } 
} 

は、第一に、私はそれがバグだらけ見つける:ここ

は、私がこれまで試してみましたコードです。私が何かをチェックすると、それは2番目のグループに移動する傾向がありますが、時々それは最初のグループに戻って、時には彼らはまったくunickしていないと私は理由を解決することはできません。

第二に、これはやっかいな方法だと思います。何かがチェックされるたびに、リスト全体を確認し、それに応じて移動します。私はちょうど私がチェックしたばかりの項目に対処する方法があると仮定しているが、私はどのように動作することはできません!

+2

最初のすばらしいこと..あなたはすべてのアイテムをループしていますか? e.Itemを使用して、イベントを発生させるlistitemのグループのみを変更します。 – Pikoh

+0

それは、私が取り除くために探しているものです、それのループの側面ですが、私はどのように確かではありませんでした。 e.itemを使用すると、このように変更することを意味しますか? プライベートvoid lstServices_ItemChecked(Object sender、ItemCheckedEventArgs ** e.item **)? エラーが発生します。私は完全にマークからですか? – Coozbiscuit

+0

イベントハンドラメソッドを変更しないで、これを追加してください: 'ListViewItem item = e.Item; if(item.Checked)... ' – Pikoh

答えて

1

は、ループを取り除くために、あなたはこのような何かをする必要があります。

private void lstServices_ItemChecked(Object sender, ItemCheckedEventArgs e) 
{ 
    ListViewItem item=e.Item; 
    if (item.Checked) 
    { 
     item.Group = lstServices.Groups[1]; 
    } 
    else 
    { 
     item.Group = lstServices.Groups[0]; 
    } 
} 

ItemCheckedEventArgs変数eは一つの特性を持って、イベントを発射したのListViewItemを返します。

+0

eはありません。商品は –

+0

ああ申し訳ありません。 ItemCheckイベントを参照しました。はい、ItemChekeEventArgsにはItemプロパティ –

+0

があります。@ UthistranS。、ItemCheckedはItemCheckedEventArgsのアイテムを返します:) – Pikoh

関連する問題