none
Limpiar varios CheckBox adentro de un GroupBox con foreach en c#

    Pregunta

  • Hola buenas tardes, el tema es el siguiente, tengo un control GroupBox que se llama, grpBox_Platos y adentro de este hay varios CheckBox, lo que yo queria hacer es que con un foreach cuando uno de los controles esta con la propiedad CheckBox.Checked = true; el control se vuelva con esta propiedad a false. El codigo esta adentro de un boton con el evento Click.
    El codigo que estoy poniendo es asi:


    foreach(Control c in this.grpbox_Platos.Controls)
    {
    if(c is CheckBox)
    c.

    }

    adentro del if es a donde esta el problema porque cuando pongo c. no me da la opcion Checked ni tampoco la ChekState.

    Es la primera vez que queria usar algo de este tipo y me base en el siguiente codigo que es para TexBox.

    foreach(Control c in this.GroupBox1.Controls)
    {
    // Limpiar los textbox
    if( c is TextBox ){
    c.Text = "";
    }


    Desde ya muchas gracias y agradezco todas las opiniones,
    miércoles, 12 de noviembre de 2008 17:43

Respuestas

  • Asi

     

    foreach(Control c in this.grpbox_Platos.Controls)
    {
    if(c is CheckBox)
     

      ((CheckBox)c).Checked = false;

    }

     

    pero fijate si dentro GroupBox tiene otros contenedores de otros controles ya que si es asi tendrias que hacer algo recursivo

     

    Sauludos

    Giancarlo Rolando Huarcaya Martinez

    miércoles, 12 de noviembre de 2008 18:00

Todas las respuestas

  • Asi

     

    foreach(Control c in this.grpbox_Platos.Controls)
    {
    if(c is CheckBox)
     

      ((CheckBox)c).Checked = false;

    }

     

    pero fijate si dentro GroupBox tiene otros contenedores de otros controles ya que si es asi tendrias que hacer algo recursivo

     

    Sauludos

    Giancarlo Rolando Huarcaya Martinez

    miércoles, 12 de noviembre de 2008 18:00
  • Hola, muchisimas gracias por tu pronta respuesta, puse asi como me dijiste y la verdad funciona como lo esperaba, todo ok.
    En esta parte que pones asi:
    ((CheckBox)c) seria algo asi como hacer un Cast ?, porque la verdad q no se me habia ocurrido (bueno, todavia hay muchas cosas que no se) ; te pregunto asi se como funciona y si en algun otro momento tengo el mismo inconveniente lo puedo resolver solo.

    DESDE YA TE AGRADEZCO POR TU AYUDA:                                
    miércoles, 12 de noviembre de 2008 18:19
  • Hola e estado utilizando ese codigo pero mi pregunta es la siguiente... ustedes ejecutan un controlador a la ves, pero yo quice ejecutar mas de uno,  en donde especifico en el metodo puse en de la form, y un grupbox al mismo tiempo separados por una coma, y lo curioso es que al crear todo el metodo no me marca error , pero cuando lo quiero ejecutar en un boton si me marca error, en pocas palabras puedo crear el metodo pero no ejecutarlo. mi pregunta de nuevo es. si se puede hacer de esta forma, o si esta bien echo el metodo como lo ejecuto para que me haga las dos cosas las del form y el grupbox??? o si de plano no se permite hacer de esta forma... o se hace alguna otra manera me gustaria que me dijeran...

    private void limpiarTextos(Form forma,GroupBox grupo)

    {

    foreach (Control acontrol in forma.Controls)

    {

    if (acontrol is TextBox)

    {

    acontrol.Text =

    "";

    }

    }

    foreach (Control che in forma.Controls)

    {

    if (che is CheckBox)

    {

    ((

    CheckBox)che).Checked = false;

    }

    }

    foreach (Control gru in this.groupBox1.Controls)

    {

    if(gru is CheckBox)

    {

    ((

    CheckBox)gru).Checked = false;

    }

    }

    }

    jueves, 14 de junio de 2012 22:05
  • :-)
    Hola,

    Creo que te estás liando un poco, mejor cambia el enfoque:

    Agrega una clase 'ControlsExtensions' a tu proyecto y agrega estos usings:

    using System.Collections.Generic;
    using System.Windows.Forms;

    Y esta clase :

    public static List<T> GetControls<T>(this Control container) where T : Control
    {
        List<T> controls = new List<T>();
        foreach (Control c in container.Controls)
        {
            if (c is T)
                controls.Add((T)c);
            controls.AddRange(GetControls<T>(c));
        }
        return controls;
    }

    Ahora ya dispones de un método extensor de la clase Control (aplicable también a la clase Form). De este modo cuando quieras obtener los controles de un tipo X (por ejemplo CheckBox) en tu formulario o contenedor basta con hacer esto:

    this.GetControls<CheckBox>().ForEach(p => p.Checked = true);
    
    myGroupBox.GetControls<CheckBox>().ForEach(p => p.Checked = true);

    Dale un vistazo a este post que escribí hace un tiempo:

    http://geeks.ms/blogs/lfranco/archive/2010/11/05/how-to-obtener-controles-de-un-formulario-con-generics.aspx

    http://lluisfranco.com/2010/11/09/how-to-retrieve-all-controls-in-a-form-using-generics-i/

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    viernes, 15 de junio de 2012 11:13