2012-02-24 53 views
6

Necesito seleccionar y deseleccionar todos los elementos en un control de VB.NET CheckedListBox, ¿cuál es la mejor manera de hacerlo?Cómo marcar o quitar la marca de todos los elementos en VB.NET CheckedListBox Control

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 

After Hours el código anterior funciona bien para mí!

+0

Por favor, marca la respuesta correspondiente. –

Respuesta

3

Ricardo, quizás esto podría ser lo que buscas:

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

Sé que esto está marcado como la respuesta, pero está comenzando en el índice 1 y SetItemCheckState no funcionará en ningún código en el que haya trabajado, solo funciona SetItemChecked. – Keith

+0

@Keith: sí, omite intencionadamente el primer elemento porque el primer elemento es 'Seleccionar/Desmarcar todo'. – Edward

+0

Y probé ese código antes de publicarlo. entonces sé que ese código funcionó para mí. Keith, ¿SetItemCheckState no funciona para usted en WinForms o WPF? Usé un proyecto WinForm. utilicé VS 2010 ya que, en mi opinión, los últimos VS 2012 y 2013 fueron degradaciones. pero no creo que la versión VS tenga importancia. Sé que utilicé el entorno .NET 4 (creo que .NET 4.5). a veces eso importa con peculiaridades de MS. tal vez desee comparar su entorno que no funciona con SetItemCheckState a mi entorno. – Edward

14

¿Quieres decir algo como esto:

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 

Aquí estoy bucle a través de todos los productos que CheckedListBox y ajuste de su estado de activación.

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

añadido un checkbox separada llamada "Seleccionar todo". Al marcar y desmarcar estos checkbox se pueden seleccionar o deseleccionar los elementos de checklistbox. Así que usted puede llamar a esta función Kb() cualquier parte del código:

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

poner este código en el SelectedValueChanged evento.

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 

Otras soluciones son correctas, pero si quiere anular la selección de otra casilla de verificación en el interior del CheckBoxList o vaciar la CheckBoxList sin la casilla de verificación Select All permanecerá comprobado la casilla superior y que no es lógico lo que el código anterior debería resolver este problema .

1

Encontré que clbCheckedListBox.clearSelection() funciona bien para deseleccionar todo.

+0

Bienvenido a SO Trey :-). En general, no es una gran idea agregar preguntas que ya son antiguas y ya tienen una respuesta aceptada. Además, se recomienda que las respuestas escriban más que una sola línea; de lo contrario, tal vez un comentario sería mejor. Finalmente, intente formatear las contribuciones correctamente, ya que ayuda con la legibilidad; en este caso, el código se puede formatear (voy a seguir adelante y editar para que pueda ver lo que quiero decir). – Toby

+0

@Trey ¿Quieres decir '.ClearSelected()'? Mi VisualStudio 2017 con .NET target framework 4.5 no acepta su sugerencia. Y solo para los registros: esto NO quita la marca de los elementos, solo anule la selección. – PeterCo

Cuestiones relacionadas