WinForms:cómo verificar elementos mediante programación en CheckedListBox

WinForms:cómo verificar elementos mediante programación en CheckedListBox

Un CheckedListBox permite al usuario marcar una o más casillas de verificación. A veces querrá poder marcar las casillas mediante programación. Por ejemplo, es posible que desee permitir que el usuario marque o desmarque todas las casillas a la vez. O tal vez desee conservar los valores que el usuario verificó y cargarlos más tarde.

Para marcar una casilla mediante programación, puede usar cualquiera de los siguientes métodos:

checkedListBox.SetItemChecked(0, true);

checkedListBox.SetItemCheckState(0, CheckState.Checked);
Code language: C# (cs)

En este artículo, mostraré ejemplos de cómo marcar/desmarcar todas las casillas a la vez y cómo cargar valores previamente seleccionados. Usaré el siguiente WinForm:

Inicializar CheckedListBox

Primero, agregue una enumeración con el atributo [Flags]. Esto simplifica las cosas si su objetivo es conservar los valores seleccionados y cargarlos más tarde.

[Flags]
public enum ProgrammingLanguages
{
	CSharp = 1,
	Java = 2,
	CPlusPlus = 4,
	C = 8,
	JavaScript = 16,
	PHP = 32,
	Python = 64
}Code language: C# (cs)

A continuación, inicialice CheckedListBox en el constructor de formularios, así:

public frmCoding()
{
	InitializeComponent();
	clbLangs.Items.AddRange(Enum.GetNames(typeof(ProgrammingLanguages)));
}
Code language: C# (cs)

Marcar o desmarcar todas las casillas

Para marcar o desmarcar todas las casillas de verificación a la vez, recorre las casillas de verificación y llama a SetItemCheckState(), así:

private void rbSelectAll_CheckedChanged(object sender, EventArgs e)
{
	SetAllCheckboxes(CheckState.Checked);
}
private void rbSelectNone_CheckedChanged(object sender, EventArgs e)
{
	SetAllCheckboxes(CheckState.Unchecked);
}
private void SetAllCheckboxes(CheckState checkState)
{
	for (int i = 0; i < clbLangs.Items.Count; i++)
	{
		clbLangs.SetItemCheckState(i, checkState);
	}
}
Code language: C# (cs)

Cargando valores verificados previamente

Supongamos que conservó los valores marcados en la base de datos y desea cargar los valores marcados cuando el usuario hace clic en un botón.

Para hacer eso, puede recorrer los valores de enumeración y establecer el estado marcado en función del resultado de HasFlag(), así:

private void btnLoad_Click(object sender, EventArgs e)
{
	var programmer = new Programmer()
	{
		Langs = ProgrammingLanguages.CSharp | ProgrammingLanguages.Java | ProgrammingLanguages.Python
	};

	var langs = Enum.GetValues(typeof(ProgrammingLanguages)) as ProgrammingLanguages[];
	
	for (int i = 0; i < langs.Count(); i++) 
	{
		clbLangs.SetItemChecked(i, programmer.Langs.HasFlag(langs[i]));
	}

}
Code language: C# (cs)

Al hacer clic en el botón de carga, se marcarán las casillas de verificación de CSharp, Java y Python y se dejarán todas las demás casillas de verificación sin marcar.