none
Poner nombre a TextBox y realizar modificaciones creando los textbox con un bucle for. RRS feed

  • Pregunta

  • Muy buenas compañeros, llevo varios días dándole vueltas a la cabeza y no consigo sacar el código necesario para lo que estoy realizando.

    Os comento, la idea es la siguiente:

    if (TarjetaSIMDAL.IdDelEnlace(0) > 0)                                                           // Validamos con el if
    {
    btnCLP0.Font = new Font(btnCLP0.Font.FontFamily, 7);                           // en el btnCLP0 cambiamos el tipo de fuente
    btnCLP0.Text = ("  CLP 00:   "+ TarjetaSIMDAL.IdDelEnlace(0));              // le asignamos un texto
    btnCLP0.BackColor = Color.Coral;                                                          // le cambiamos el color
    }

    else

    {
    btnCLP0.Font= new Font(btnCLP0.Font.FontFamily, 7);                             // en el btnCLP0 cambiamos el tipo de fuente
    btnCLP0.Text = ("  CLP 00:  No Asignado");                                             // le asignamos un texto
    btnCLP0.BackColor = Color.LightGreen;                                                   // le cambiamos el color

    }

    Sencillo, verdad? ahora la historia está que son cientos de botones, y tenemos que validarlos todos, pues he intentando hacerlo con un for:

     for (int Botones = 0; Botones <= 300; Botones++)             // 300 por poner un ejemplo.
                {
                  if (TarjetaSIMDAL.IdDelEnlace(0) > 0)
                  {
                        String d=String.Format("MessageBox.Show(Convert.ToString(Botones))");
                        //string.Format("btnCLP{0}.Text = (\"CLP {0}: No Asignado\")", Botones);
                        String a=string.Format("btnCLP{0}.Font = new Font(btnCLP{0}.Font.FontFamily, 7)", Botones);
                        //btnCLP0.Font = new Font(btnCLP0.Font.FontFamily, 7);
                        String b=string.Format("btnCLP{0}.Text = (\"  CLP {0}:   \" + TarjetaSIMDAL.IdDelEnlace(0))", Botones);
                        //btnCLP0.Text = ("  CLP 0:   "+ TarjetaSIMDAL.IdDelEnlace(0));
                        String c=string.Format("btnCLP{0}.BackColor = Color.Coral", Botones);
                        //btnCLP0.BackColor = Color.Coral;
                  }
                  else ..............

    Si os dais cuenta lo que intento es decir que el botón nº tiene que cogerlo de la variable botones, y así que me lo vaya verificando el solo mientras cumplimenta los botones.

    El problema me surge que en este ejemplo lo he puesto en una variable String, con string.Format, pero no funciona porque la linea de código no se ejecuta, lo he probado de la siguiente manera....

    string.Format("btnCLP{0}.BackColor = Color.Coral", Botones);

    Tampoco ejecuta la linea, la verdad es que no se que tengo que hacer para que ejecute la linea como si fuera el código comentado que he puesto debajo de cada linea del ejemplo.

    Si me podéis lanzar un cable os lo agradecería.

    Un saludo compañeros.

    lunes, 22 de enero de 2018 10:44

Respuestas

Todas las respuestas

  • hola

    yo generalmente pondria los botones en un contenedor o groupbox o panel y luego:

    //realizo la condicion 
    if(if (TarjetaSIMDAL.IdDelEnlace(0) > 0)  )
    //si cumple con lo que buscas hago el recorrido de cada control y coloco 
    this.GroupBoxBotones.Controls.OfType<Buttons>().ToList().ForEach(p => p.Font = new Font(Font.FontFamily, 7));
    this.GroupBoxDeBotones.Controls.OfType<Buttons>().ToList().ForEach(p => p.Text = textoQueNecesitas + TarjetaSIMDAL.IdDelEnlace(0));
    this.GroupBoxDeBotones.Controls.OfType<Buttons>().ToList().ForEach(p => p.BackColor = Color.Coral);

    creo que te serviria usar linq para recorrer los controles, espero te sirva de ayuda.

    Suerte!


    lunes, 22 de enero de 2018 13:48
  • Buenas greg_dorian:

    Ante todo darte las gracias por responder. Voy a mirar lo que me comentas, porque realmente no entiendo lo que hace el GroupBox, aquí cada botón tendrá un color una numeración y un codigo asignado segun esté enlazado a otro grupo de items o no tenga enlace ninguno, con lo cual tambíen tendrá funciones diferentes segun su estado... (Observando el color que tiene el boton en mi ejemplo).

    No se si lo que me comentas me servirá voy a mirarlo, porque como te he dicho no lo entiendo como funciona.

    Yo pensaba que lo mas simple era que se pudiera ejecutar lo que string.Format contiene, indicándole con la Variable Botones que numeración tenía {0}.

    Si sabes como hacerlo genial porque eso si lo entiendo, sinó como te he dicho voy a intentar entender que hace ese groupbox.

    string.Format("btnCLP{0}.Text = (\"  CLP {0}:   \" + TarjetaSIMDAL.IdDelEnlace(0))", Botones);

    Muchas gracias y un saludo.

    lunes, 22 de enero de 2018 14:43
  • hola tambien puedes emular un array de controles aca un ejemplo con text box

    https://stackoverflow.com/questions/5435293/how-do-i-make-a-control-array-in-c-sharp-2010-net

    https://stackoverflow.com/questions/5435293/how-do-i-make-a-control-array-in-c-sharp-2010-net

    lunes, 22 de enero de 2018 16:34
  • Muchas gracias por tu ayuda, así lo he hecho.

    Muy amable.

    miércoles, 24 de enero de 2018 8:06
  • Todos los botones siempre tienen un parent que a su vez contiene la coleccón controls donde estan los botones en este caso.

    El algorismo que tienes que seguir es el siguiente. 

    Para todos los controles de una coleccion  que son botones y  cuyo nombre empieze  por tal, hacer accion sobre el control.

    Supon ahora que klos botones estan todos en un form y este es el parent, (podria ser un panel o un tabControl) pero será el form. eL form se llama form1.

    form1.Controls.Cast<control>().ToList().Where(c=>typeof(c) is button && (button).Name.ToLower().StartWith("btnclp").Cast<button>().ToList().Forach(b=>{

    b.BackColor = Color.Baclk;

    ....

    bla bla

    ...

    });

    Y listo

    miércoles, 24 de enero de 2018 15:16