2012-02-24 592 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 

盤後上面的代碼工作對我很好!

+0

請標記相應的答案。 – 2012-11-30 14:27:37

回答

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在我曾經工作過的任何代碼中都不工作,只有SetItemChecked工作。 – Keith 2015-03-27 18:01:14

+0

@Keith:是的,它故意跳過第一個項目,因爲第一個項目是'選擇/取消全選'。 – Edward 2015-04-04 18:05:28

+0

我在發佈之前測試了該代碼。所以我知道代碼爲我工作。 Keith,SetItemCheckState在WinForms或WPF中不適用於你?我使用了一個WinForm項目。因爲在我看來,VS VS 2010和VS 2013都是降級的。但我不認爲VS版本的問題很重要。我知道我使用.NET 4環境(我認爲.NET 4.5)。有時這與MS怪癖有關。也許你可能想比較你的環境不適用於SetItemCheckState到我的環境。 – Edward 2015-04-04 18:12:18

14

你的意思是這樣的:

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項循環,並設置其選中狀態。

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內的另一個複選框或清空的CheckBoxList沒有Select All複選框 頂端的複選框將保持檢查,所以上面的代碼應該解決這個問題,這是不符合邏輯。

1

我發現clbCheckedListBox.clearSelection()適用於取消所有選擇。

+0

歡迎來到SO Trey :-)。一般來說,添加這樣的問題並不是一個好主意,已經有了一個可以接受的答案。此外,鼓勵回答不僅僅寫一行 - 否則可能會有更好的評論。最後,請嘗試正確格式的貢獻,因爲它有助於可讀性;在這種情況下,代碼可以格式化(我會繼續編輯,以便看到我的意思)。 – Toby 2017-07-28 22:50:42

+0

@Trey你的意思是'.ClearSelected()'?我的VisualStudio 2017與.NET目標框架4.5不接受你的建議。只是記錄:這不會取消選中項目,只需取消選擇它們。 – PeterCo 2018-02-14 13:04:57

相關問題