C # Windowsform: cómo mejoró este código (cuadro de texto y etiqueta creados en tiempo de ejecución) cambiar demasiados ifs a la estructura de repetición

Tengo un código que funciona pero no es como me gustaría.

en tiempo de ejecución, creo muchos cuadros de texto/etiquetas nuevos, así que tuve que usar 10 ifs para verificar que cada cuadro de texto "futuro" tenga una longitud de texto = 0 y! = nulo

Me gustaría usar una estructura de repetición como for o while, no sé si es posible.

Por ejemplo, si creo más cuadros de texto/etiquetas, será imposible tener un código realmente grande.

Ver mi código:

private void cadeiaapagarcampos(TextBox _text, EventArgs e)
        {           
            if (_text.Text == "")
            {
                Label lblAcessorio2 = (Label)gpbCategoria.Controls.Find("lblAcessorio2", false).FirstOrDefault();
                TextBox txtAcessorio2 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio2", false).FirstOrDefault();
                Label lblAcessorio3 = (Label)gpbCategoria.Controls.Find("lblAcessorio3", false).FirstOrDefault();
                TextBox txtAcessorio3 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio3", false).FirstOrDefault();
                Label lblAcessorio4 = (Label)gpbCategoria.Controls.Find("lblAcessorio4", false).FirstOrDefault();
                TextBox txtAcessorio4 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio4", false).FirstOrDefault();
                Label lblAcessorio5 = (Label)gpbCategoria.Controls.Find("lblAcessorio5", false).FirstOrDefault();
                TextBox txtAcessorio5 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio5", false).FirstOrDefault();
                Label lblAcessorio6 = (Label)gpbCategoria.Controls.Find("lblAcessorio6", false).FirstOrDefault();
                TextBox txtAcessorio6 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio6", false).FirstOrDefault();
                Label lblAcessorio7 = (Label)gpbCategoria.Controls.Find("lblAcessorio7", false).FirstOrDefault();
                TextBox txtAcessorio7 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio7", false).FirstOrDefault();
                Label lblAcessorio8 = (Label)gpbCategoria.Controls.Find("lblAcessorio8", false).FirstOrDefault();
                TextBox txtAcessorio8 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio8", false).FirstOrDefault();
                Label lblAcessorio9 = (Label)gpbCategoria.Controls.Find("lblAcessorio9", false).FirstOrDefault();
                TextBox txtAcessorio9 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio9", false).FirstOrDefault();
                Label lblAcessorio10 = (Label)gpbCategoria.Controls.Find("lblAcessorio10", false).FirstOrDefault();
                TextBox txtAcessorio10 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio10", false).FirstOrDefault();

                if (txtAcessorio2 != null && txtAcessorio2.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio2);
                    gpbCategoria.Controls.Remove(lblAcessorio2);
                    btnSalvar.Focus();
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }                    
                }
                if (txtAcessorio3 != null && txtAcessorio3.TextLength == 0)
                {

                    gpbCategoria.Controls.Remove(txtAcessorio3);
                    gpbCategoria.Controls.Remove(lblAcessorio3);
                    btnSalvar.Focus();
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
                if (txtAcessorio4 != null && txtAcessorio4.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio4);
                    gpbCategoria.Controls.Remove(lblAcessorio4);
                    btnSalvar.Focus();
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
                if (txtAcessorio5 != null && txtAcessorio5.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio5);
                    gpbCategoria.Controls.Remove(lblAcessorio5);
                    btnSalvar.Focus();
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
                if (txtAcessorio6 != null && txtAcessorio6.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio6);
                    gpbCategoria.Controls.Remove(lblAcessorio6);
                    btnSalvar.Focus(); 
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
                if (txtAcessorio7 != null && txtAcessorio7.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio7);
                    gpbCategoria.Controls.Remove(lblAcessorio7);
                    btnSalvar.Focus(); 
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
                if (txtAcessorio8 != null && txtAcessorio8.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio8);
                    gpbCategoria.Controls.Remove(lblAcessorio8);
                    btnSalvar.Focus();
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
                if (txtAcessorio9 != null && txtAcessorio9.TextLength == 0)
                {
                    gpbCategoria.Controls.Remove(txtAcessorio9);
                    gpbCategoria.Controls.Remove(lblAcessorio9);
                    btnSalvar.Focus();
                    if (test != 1)
                    {
                        n--;
                        t++;
                        if (n >= 1 && n <= 10)
                        {
                            testeapagar();
                            test = 1;
                        }
                    }
                }
            }
        }

preguntado el 03 de mayo de 13 a las 08:05

2 Respuestas

¿Sería algo así lo que estás buscando? Si tiene más etiquetas, simplemente actualice iAcessorioContar y las verificará automáticamente, siempre y cuando nombre las etiquetas de forma incremental.

private void cadeiaapagarcampos(TextBox _text, EventArgs e)
        {
            if (_text.Text == "")
            {
                int iAcessorioContar = 10;
                for (int iContador = 2; iContador <= iAcessorioContar; iContador++) {
                    Label lblAcessorio = (Label)gpbCategoria.Controls.Find("lblAcessorio"+iContador, false).FirstOrDefault();
                    TextBox txtAcessorio = (TextBox)gpbCategoria.Controls.Find("txtAcessorio"+iContador, false).FirstOrDefault();

                    if (txtAcessorio != null && txtAcessorio.TextLength == 0)
                    {
                        gpbCategoria.Controls.Remove(txtAcessorio);
                        gpbCategoria.Controls.Remove(lblAcessorio);
                        btnSalvar.Focus();
                        if (test != 1) {
                            n--;
                            t++;
                            if (n >= 1 && n <= 10)
                            {
                                testeapagar();
                                test = 1;
                            }
                        }                    
                    }
                }
            }
        }

contestado el 03 de mayo de 13 a las 08:05

Realmente, gracias por ser increíble +1000, realmente hará las cosas más fáciles y mejores, usaré esta sintaxis en muchos códigos que tengo. Eres de Brasil ? Usas la variable: iAcessorioContar (portugués), caso seja, muito obrigado ! - Felipe Salomao

¡De nada! Me alegro de que haya ayudado, construir su código de esta manera hace que las cosas sean mucho más dinámicas. Puede mejorarlo incrementando iAcessorioContar en 1 cada vez que cree un control o disminuyéndolo cuando elimine un control para que no tenga que actualizarlo usted mismo cada vez. No soy de Brasil, pero sé un par de palabras (o al menos creo que sí) y pensé que debería adaptarme al idioma utilizado. - Nick

Gracias de nuevo, lo logré, la variable n que ya está en mi código es una variable que sabe si tiene un cuadro de texto del 1 al 10, así que reemplacé 10 por n y funcionó muy bien, de esta manera evité bucles innecesarios. - Felipe Salomao

Puede agregar los controles en pares (etiqueta y cuadro de texto) a una lista cuando los crea para que no tenga que buscar en la colección de controles, lo que puede llevar mucho tiempo.

A continuación, puede simplemente hacer un bucle en la lista.

contestado el 03 de mayo de 13 a las 08:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.