none
Detectar GroupBox para evento click RRS feed

  • Pregunta

  • Buenas tardes, alguien me podría ayudar?.....como hago una condición para que un botón no sea visible hasta que 6 GroupBox estén "habilitados", cada GroupBox cuenta con 3 RadioButton, agradecería mucho su ayuda.
    lunes, 7 de marzo de 2016 21:28

Respuestas

  • hola

    podrias ayudarte con linq para determinar cuando los radio de los groupbox estan marcados, pero el tema es en que evento lo determinas, quizas asociando alguno dinamicamente, como ser

    public void Form1_Load(..){
    
       button1.Visible = false;
    
       var radiobuttons = this.Controls.OfType<GroupBox>().SelectMany(x=> x.Controls.OfType<RadioButton>());
    
       foreach(var item in radiobuttons){
    
             item.Checked += radiobutton_Checked;
    
       }
    
    }


    public void radiobutton_Checked(...){
    
        var allchecked = this.Controls.OfType<GroupBox>().Any(x=> x.Controls.OfType<RadioButton>().Any(y=> y.Checked));
    
        if(allchecked){
             button1.Visible = true;
        }
    
    }

    la ides es asociar un evento comun a todos los radiobutton y luego en ese evento poder verificar dentro de cada groubox que al menos este un radiobuton marcado


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 8 de marzo de 2016 2:15

Todas las respuestas

  • Hola,

    Supongo que te refieres a que si selecciona unos de los 3 RadioButton del groupBox, este último se encuentre apto (habilitado), en conclusión todos los groupBox tienen que tener un radioButton para que se habilite el BOTÓN ?

    Si es así tendrías que crear un EventHandler y enlazar a los RadioButton, para que validen la misma acción.

    radio.Click += new EventHandler

    O también puedes crear un Timer que verifique cada segundo, si el botón se puede habilitar, pero no la recomiendo mucho.

    Saludos.


    JC NaupaCrispín

    lunes, 7 de marzo de 2016 22:27
  • hola

    podrias ayudarte con linq para determinar cuando los radio de los groupbox estan marcados, pero el tema es en que evento lo determinas, quizas asociando alguno dinamicamente, como ser

    public void Form1_Load(..){
    
       button1.Visible = false;
    
       var radiobuttons = this.Controls.OfType<GroupBox>().SelectMany(x=> x.Controls.OfType<RadioButton>());
    
       foreach(var item in radiobuttons){
    
             item.Checked += radiobutton_Checked;
    
       }
    
    }


    public void radiobutton_Checked(...){
    
        var allchecked = this.Controls.OfType<GroupBox>().Any(x=> x.Controls.OfType<RadioButton>().Any(y=> y.Checked));
    
        if(allchecked){
             button1.Visible = true;
        }
    
    }

    la ides es asociar un evento comun a todos los radiobutton y luego en ese evento poder verificar dentro de cada groubox que al menos este un radiobuton marcado


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 8 de marzo de 2016 2:15
  • gracias por el apoyo

    solo una cosa más, yo no se mucho sobre esto pero me marca un error tu código

     por los signos (+=)

    que podría hacer?

    miércoles, 9 de marzo de 2016 15:19
  • Hola,

    Muy interesante lo que plantea Leandro, yo no sé mucho de Linq, pero te dejo otra forma como se me ocurrió.

      //Aquí almacenamos cuantos GroupBox tenemos
            int numeroGrupos = 0;
    
            private void FrmLogin_Load(object sender, EventArgs e)
            {
    
                foreach (Control c in this.Controls)
                {
                    if (c is GroupBox)
                    {
                        foreach (RadioButton radio in c.Controls)
                        {
                            if (radio is RadioButton)
                            {
                                radio.Click += new EventHandler(verificar);
                            }
                        }
                        //Es un grupo
                        numeroGrupos++;
                    }
                }
    
            }


    private void verificar(object sender, System.EventArgs e)
            {
    
                /* ESTOS ES PARA VERIFICAR TODOS LOS GRUPOS SI ESTAN CORRECTOS */
    
                int gruposCorrectos = 0;
                int radiosCorrectos = 0;
    
                foreach (Control c in this.Controls)
                {
                    if (c is GroupBox)
                    {
                        foreach (Control rb in c.Controls)
                        {
                            radiosCorrectos = 0;
    
                            if (rb is RadioButton)
                            {
                                if (((RadioButton)rb).Checked == true)
                                {
                                    radiosCorrectos++;
                                }
                            }
    
                            if (radiosCorrectos > 0)
                            {
                                gruposCorrectos++;
                                c.BackColor = Color.GreenYellow;
                            }
                        }
                    }
                }
    
                txtGruposCorrectos.Text = gruposCorrectos.ToString();
                txtNumeroGrupos.Text = numeroGrupos.ToString();
    
                //Si los grupos que están aptos son igual al número de GroupBox existentes en el Form
                if (gruposCorrectos == numeroGrupos)
                {
                    btnMiBoton.Enabled = true;
                }
            }

    Y aquí muestro el funcionamiento.

    Saludos.


    JC NaupaCrispín

    jueves, 10 de marzo de 2016 0:05
  • >>me marca un error tu código  por los signos (+=) que podría hacer?

    que dice el mensaje de error ?

    estas declarando el metodo del evento con la firma correcta ? cuando puse en el ejemplo el metodo radiobutton_Checked use ... elli debes completar con al forma del evento indicando el "sender" y el "e"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 10 de marzo de 2016 1:40