2011-02-02 4 views
3

私は3つのリストボックスを使用しています。反転ボタンを使用して、すべてのリストボックスで選択した項目を反転する必要があります。forループを1つだけ使用して、複数のリストボックスで選択した項目を反転させる方法はありますか?

どのように1つのループだけを使用してコード化できますか? 3つ以上のリストボックスもあります。

+1

それが役立つだろうこれをもう少し動機づけることができれば。現在のところ、宿題の問題のように読んでいて、なぜ単一のループでタスクを達成する必要があるのか​​わかりません。 – warrenm

答えて

4

この関数を使用して、指定したリストボックスの選択を反転することができます。

/* Windows ListBox 
    public void InvertSelection(ListBox objLstbox) 
    { 
     if(objLstbox == null) return; 

     for (int i = 0; i < objLstbox.Items.Count; i++) 
      objLstbox.SetSelected(i, !objLstbox.GetSelected(i)); 
    } 
    */ 

    //WebApp listbox 
    public void InvertSelection(ListBox objLstbox) 
    { 
     if (objLstbox == null) return; 

     for (int i = 0; i < objLstbox.Items.Count; i++) 
      objLstbox.Items[i].Selected = !objLstbox.Items[i].Selected; 
    } 

    private void btnInvert_Click(object sender, EventArgs e) 
    { 
     InvertSelection(listBox1); 
     InvertSelection(listBox2); 
     InvertSelection(listBox3); 
    } 
+0

それだけであれば簡単です... 'ListBox'コントロールには単純に逆転できる' Boolean'型の 'Selected'プロパティがありません。つまり、あるべきことよりもはるかに多くのモンキーがあります。詳細は私の答えを見てください。 –

+0

擬似コードをC#コードの作業に更新しました。指摘してくれてありがとう。 – AbrahamJP

+1

ああ、あなたは私の間違いを明らかにする!私は 'SetSelected'プロパティについてすべてを忘れていました! +1、より洗練されたソリューションです。 –

0
public void InvertSelection(ListBox objLstbox) 
{ 
    if (objLstbox == null) return; 

    for (int i = 0; i < objLstbox.Items.Count; i++) 
     objLstbox.Items[i].Selected = !objLstbox.Items[i].Selected; 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    InvertSelection(ListBox1); 
} 
+0

あなたはWebアプリケーションのリストボックスコントロールをしているようです。私はWebとWindowsの両方を含むようにコードスニペットを更新しました。 "// WebApp listbox"とコメントされた "InvertSelection"メソッドを使用できます。これはうまくいくはずです。 – AbrahamJP

0

私はここでVB.Netの回答だあなたの残りの部分と、この上で私の頭を打ち、最後に を反転させるための私自身の機能を開発しました:

Private Function InvertListBoxSelections(ByRef tempListBox As ListBox) As Integer 
    Dim selectedind(tempListBox.SelectedItems.Count) As Integer 
    Try 
     For selind = 0 To tempListBox.SelectedItems.Count - 1 
      selectedind.SetValue(tempListBox.Items.IndexOf(tempListBox.SelectedItems(selind)), selind) 
     Next 
     tempListBox.ClearSelected() 
     For listitemIndex = 0 To tempListBox.Items.Count 
      If Array.IndexOf(selectedind, listitemIndex) < 0 Then 
       tempListBox.SetSelected(listitemIndex, True) 
      End If 
     Next 
     Return 1 
    Catch ex As Exception 
     Return 0 
    End Try 
End Function 
0
for (int i = 0; i < listbox.Items.Count; i++) 
    { 
     if (listbox.SelectedItems.Contains(listbox.Items[i])) 
      listbox.SetSelected(i, false); 
     else 
      listbox.SetSelected(i, true); 
    } 
関連する問題