2012-02-24 13 views
6

VB.NET CheckedListBoxコントロールのすべてのアイテムを選択および選択解除する必要があります。これを行うにはどうすればよいですか?VB.NET CheckedListBoxコントロールのすべてのアイテムをチェックする/チェックを解除する方法

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

     With clbCheckedListBox 

     .Items.Add("Select/UnSelect All") 
     .Items.Add("Enero") 
     .Items.Add("Febrero") 
     .Items.Add("Marzo") 
     .Items.Add("Abril") 
     .Items.Add("Mayo") 
     .Items.Add("Junio") 
     .Items.Add("Julio") 
     .Items.Add("Agosto") 
     .Items.Add("Septiembre") 
     .Items.Add("Octubre") 
     .Items.Add("Noviembre") 
     .Items.Add("Diciembre") 

     .SelectedIndex = 0 

    End With 


End Sub 


    Private Sub clbCheckedListBox_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles clbCheckedListBox.ItemCheck 

    If e.Index = 0 Then 

     If e.NewValue = CheckState.Checked Then 

      For idx As Integer = 1 To Me.clbCheckedListBox.Items.Count - 1 
       Me.clbCheckedListBox.SetItemCheckState(idx, CheckState.Checked) 
      Next 

     ElseIf e.NewValue = CheckState.Unchecked Then 

      For idx As Integer = 1 To Me.clbCheckedListBox.Items.Count - 1 
       Me.clbCheckedListBox.SetItemCheckState(idx, CheckState.Unchecked) 
      Next 

     End If 

    End If 

End Sub 

時間が経過すると、私のために上手く動作します!

Dim checked As Boolean = True ' Set to True or False, as required. 
For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
    CheckedListBox1.SetItemChecked(i, checked) 
Next 

ここで私はちょうどすべてにCheckedListBox項目をループしてそのチェック状態を設定しています:

+0

適切な回答に印を付けてください。 –

答えて

3

リカルド、おそらくこれはあなたが探しているものかもしれません:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim items$() = New String() {"Select/UnSelect All", "Enero", 
    "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", 
    "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"} 
    For Each Str As String In items : clbCheckedListBox.Items.Add(Str) : Next 
End Sub ' Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) 

Private Sub clbCheckedListBox_ItemCheck(sender As System.Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles clbCheckedListBox.ItemCheck 
    If e.Index = 0 Then 
     Dim newCheckedState As CheckState = e.NewValue 
     For idx As Integer = 1 To clbCheckedListBox.Items.Count - 1 
      Me.clbCheckedListBox.SetItemCheckState(idx, newCheckedState) 
     Next 
    End If 
End Sub 
+0

これは答えとしてマークされていますが、インデックス1から始まり、SetItemCheckStateが動作しているコードでは機能しません。 – Keith

+0

@Keith:はい最初の項目は 'Select/UnSelect All'なので、意図的に最初の項目をスキップします。 – Edward

+0

そして私はそれを投稿する前にそのコードをテストしました。だから私はコードが私のために働いたことを知っている。キース、SetItemCheckStateはWinFormsやWPFでうまく動かないのですか?私はWinFormプロジェクトを使用しました。私はVS 2010を使用しました。私の意見では、後のVS 2012と2013はダウングレードでした。しかし、私はVSバージョンの問題は重要だとは思わない。私は.NET 4環境(私は.NET 4.5と思う)を使用したことを知っています。時にはそれはMSの癖に関係します。おそらく、私の環境にSetItemCheckStateで動作しないur環境を比較したいかもしれません。 – Edward

14

は、あなたがこのような何かを意味しています。

1
To check all CheckedListBox Item: 

For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
    CheckedListBox1.SetItemChecked(i, True) 
Next 

To uncheck all CheckedListBox Item: 

For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
    CheckedListBox1.SetItemChecked(i, false) 
Next 
4
If button.Text = "Select All" Then 
    For i As Integer = 0 To checklist.Items.Count - 1 
     checklist.SetItemChecked(i, True) 
    Next 
    Button.Text = "Deselect All" 
Else 
    For i As Integer = 0 To checklist.Items.Count - 1 
     checklist.SetItemChecked(i, False) 
     Button.Text = "Select All" 
    Next 
End If 
0

は、 "すべて選択" と呼ばれる別のcheckboxを追加しました。このcheckboxのチェックとチェックを外すと、checklistboxのアイテムを選択または選択解除できます。つまり、あなたのコード内の任意の場所にこのKb()関数を呼び出すことができます。

Private Sub ChkSelectAll_Click(sender As Object, e As EventArgs) Handles ChkSelectAll.Click 
    Kb(ChkSelectAll.CheckState) 
End Sub 

Private Sub Kb(ByVal Key As Boolean) 
    For i As Integer = 0 To ChkLstServices.Items.Count - 1 
     ChkLstServices.SetItemChecked(i, Key) 
    Next 
End Sub 
0

イベントSelectedValueChangedにこのコードを入れてください。

Private Sub clbCheckedListBox_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles ContrListCheckBox.SelectedValueChanged 
    If clbCheckedListBox.SelectedIndex = 0 Then 
     If clbCheckedListBox.GetItemChecked(0) = False Then 
      For idx As Integer = 1 To clbCheckedListBox.Items.Count - 1 

       Me.clbCheckedListBox.SetItemChecked(idx, False) 
      Next 
     Else 
      For idx As Integer = 1 To ContrListCheckBox.Items.Count - 1 

       Me.clbCheckedListBox.SetItemChecked(idx, True) 
      Next 
     End If 
    ElseIf clbCheckedListBox.SelectedIndex > 0 Then 
     If clbCheckedListBox.CheckedItems.Count = clbCheckedListBox.Items.Count - 1 And clbCheckedListBox.GetItemChecked(0) = False Then 
      clbCheckedListBox.SetItemCheckState(0, CheckState.Checked) 
     End If 
     For idx As Integer = 1 To clbCheckedListBox.Items.Count - 1 

      If clbCheckedListBox.GetItemChecked(idx) = False Then 
       clbCheckedListBox.SetItemCheckState(0, CheckState.Unchecked) 

      End If 
     Next 
    End If 
End Sub 

他の解決策は正しいですが、あなたはCheckBoxListの内部に別のチェックボックスをオフにしたり トップチェックボックスがチェックされたままになりますSelect AllチェックボックスなしのCheckBoxListを空にしたいと場合は、上記のコードは、この問題を解決する必要がありますので、それは論理的ではありません。

1

私はclbCheckedListBox.clearSelection()がすべてを選択解除するのに効果があることがわかりました。

+0

SO Trey :-)ようこそ。一般に、これは古いものであり、すでに受け入れられている質問を追加することは、素晴らしい考えではありません。さらに、回答は単なる1行以上のものを書くことを推奨します。そうでなければ、コメントがより良くなるかもしれません。最後に、読みやすいようにフォーマットの貢献を正しく試してください。この場合、コードをフォーマットすることができます(私は先に進んで編集して、私が意味することを見ていきます)。 – Toby

+0

@Treyあなたは '.ClearSelected()'を意味しますか?私のVisualStudio 2017 .NETターゲットフレームワーク4.5ではあなたの提案を受け入れていません。レコードの場合:これはアイテムのチェックを外したり、アイテムの選択を解除したりすることはありません。 – PeterCo

関連する問題