none
Problemas con un CheckListBox RRS feed

  • Pregunta

  • Hola a todos, tengo en mi Windows Form un CheckListBox con cuatro opciones posibles a checkear.

    En el código tengo un evento que controla el cambio y teóricamente evita que se queden las cuatro sin teclear el check activo.

    Si pulso solo una vez sobre uno checkeado no pasa nada pero si pulso con el ratón con doble click se desmarca dejando los cuatro sin checkear y eso no puede ser, siempre tiene que haber uno activo.

    Podéis decirme porque no me funciona mi evento si doy doble click y como poder desactivar el doble click.

    Os adjunto el evento

    Espero me podáis ayudar.

    Un saludo

    Miguel

     private void CHKEleec1_SelectedIndexChanged(object sender, EventArgs e)
            {
                int ITE = CHKEleec1.SelectedIndex;
                for (int a = 0; a < CHKEleec1.Items.Count; a++)
                {
                    if (a != ITE)
                    {
                        CHKEleec1.SetItemCheckState(a, CheckState.Unchecked);
                    }
                }
                Selecc1 = CHKEleec1.Text;
                if (CHKEleec1.GetItemChecked(ITE))
                {
                    //if (MessageBox.Show("Valor getitem.. " + CHKEleec1.GetItemChecked(ITE) + " ITE .." + ITE, "My Application",
                    //  MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    //  == DialogResult.Yes)
                    //{
    
                    //}
                    if (ITE == 1)
                    {
                        CHKEleec1.SetItemChecked(ITE, true);
                    }
                    else
                    {
                        if (ITE == 0)
                        {
                            CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
                        }
                        else
                        {
                            if (ITE == 2)
                            {
                                CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
                            }
                            else
                            {
                                CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
                            }
                        }
                    }
                }
                else
                {
                    //if (MessageBox.Show("Valor getitem.. " + CHKEleec1.GetItemChecked(ITE) + " ITE .." + ITE, "My Application",
                    //  MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    //  == DialogResult.Yes)
                    //{
    
                    //}
                    if (ITE == 1)
                    {
                        CHKEleec1.SetItemChecked(ITE, true);
                    }
                    else
                    {
                        if (ITE == 0)
                        {
                            CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
                        }
                        else
                        {
                            if (ITE == 2)
                            {
                                CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
                            }
                            else
                            {
                                CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
                            }
                        }
                    }
                }
                //CHKEleec1.SetItemCheckState(ITE, CheckState.Checked);
            }

    sábado, 9 de diciembre de 2017 20:50

Respuestas

  • El "problema" también se presentará al presionar la barra de espacio del teclado, o si se pincha, con el puntero del mouse, sobre la casilla de verificación.

    private void CHKEleec1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
    	var clbx = (CheckedListBox)sender;
    	if (e.Index == clbx.SelectedIndex) e.NewValue = CheckState.Checked;
    }
    
    private void CHKEleec1_SelectedIndexChanged(object sender, EventArgs e)
    {
    	var clbx = (CheckedListBox)sender;
    	clbx.SetItemChecked(clbx.SelectedIndex, true);
    
    	for (int i = 0; i < clbx.Items.Count; i++)
    		if (i != clbx.SelectedIndex) clbx.SetItemChecked(i, false);
    	}
    }

    Presupongo que tienes claro que tener una lista de casillas de verificación supone que el usuario pueda seleccionar ninguno, uno o más de un elemento de la lista, ¿verdad?, si buscas seleccionar un sólo elemento entonces debes usar un control de tipo ListBox o quizá el control de tipo ComboBox.

    • Marcado como respuesta MiguelVB domingo, 10 de diciembre de 2017 11:10
    sábado, 9 de diciembre de 2017 22:01
  • ...yo necesito que sólo pueda haber un sólo elemento seleccionado y no puede estar vacíos todos, ¿con lo que me has enviado se resuelve esto? 

    Claro, procuro responder sólo cuando tengo claro las necesidades del OP, y si, la respuesta resuelve el caso que presentas.

    • Marcado como respuesta MiguelVB domingo, 10 de diciembre de 2017 11:10
    sábado, 9 de diciembre de 2017 22:12

Todas las respuestas

  • El "problema" también se presentará al presionar la barra de espacio del teclado, o si se pincha, con el puntero del mouse, sobre la casilla de verificación.

    private void CHKEleec1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
    	var clbx = (CheckedListBox)sender;
    	if (e.Index == clbx.SelectedIndex) e.NewValue = CheckState.Checked;
    }
    
    private void CHKEleec1_SelectedIndexChanged(object sender, EventArgs e)
    {
    	var clbx = (CheckedListBox)sender;
    	clbx.SetItemChecked(clbx.SelectedIndex, true);
    
    	for (int i = 0; i < clbx.Items.Count; i++)
    		if (i != clbx.SelectedIndex) clbx.SetItemChecked(i, false);
    	}
    }

    Presupongo que tienes claro que tener una lista de casillas de verificación supone que el usuario pueda seleccionar ninguno, uno o más de un elemento de la lista, ¿verdad?, si buscas seleccionar un sólo elemento entonces debes usar un control de tipo ListBox o quizá el control de tipo ComboBox.

    • Marcado como respuesta MiguelVB domingo, 10 de diciembre de 2017 11:10
    sábado, 9 de diciembre de 2017 22:01
  • Hola, gracias por responderme Sobre lo que comentas, yo necesito que solo pueda haber un solo elemento seleccionado y no puede estar vacíos todos Con lo que me has enviado se resuelve esto? Ya me dirás Lo probaré mañana porque ahora estoy fuera Espero noticias tuyas al respecto Un saludo y gracias Buenas noches Miguel
    sábado, 9 de diciembre de 2017 22:07
  • ...yo necesito que sólo pueda haber un sólo elemento seleccionado y no puede estar vacíos todos, ¿con lo que me has enviado se resuelve esto? 

    Claro, procuro responder sólo cuando tengo claro las necesidades del OP, y si, la respuesta resuelve el caso que presentas.

    • Marcado como respuesta MiguelVB domingo, 10 de diciembre de 2017 11:10
    sábado, 9 de diciembre de 2017 22:12
  • Gracias Mañana lo probaré Un saludo Miguel
    sábado, 9 de diciembre de 2017 23:37
  • Buenos días Williams,

    Me ha funcionado correctamente.

    Gracias por tu ayuda y colaboración.

    Un saludo y gasta pronto.

    Miguel

    domingo, 10 de diciembre de 2017 11:10