none
Controles dinamicos RRS feed

  • Pregunta

  • Hola de nuevo esta vez es para consultar si es practico o no usar controles dinamicos en este caso en un windows form dado que tengo que realizar varias consultas de acuerdo a la seleccion de un combobox y son varios tipos de controles en cada consulta y si ademas tambien tengo que eliminar los eventos de los mismos desde ya gracias
    martes, 3 de febrero de 2015 21:21

Respuestas

  • hola

    lo que yo proponia es que definas template segun cada tipo dentro de un user control donde puedes definir usando un diseñador

    entonces en lugar de cargar controles individuales simplemente carga uno solo el user control dentro de un Panel, asi segun la opcion

    por eso te decia que conoces los user controls?

    ------

    >>int buscar = Convert.ToInt32(txtNumeroActa.text); <== aqui no me reconoce el control

    y no lo va a reconocer si lo cread dinamicamente, vas a tener que localizarlo tambine de forma dinamica, si te animas con linq

    TextBox txtNumeroActa =  groupBox1.Controls.OfType<TextBox>().FirstOrDefault(x=> x.Name == "txtNumeroActa");

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta EnzoTuc40 miércoles, 4 de febrero de 2015 16:09
    miércoles, 4 de febrero de 2015 14:27

Todas las respuestas

  • No sé muy bien a qué apunta con su pregunta. Lo que le puedo decir es que uno usa controles dinámicos, o mejor dicho, uno agrega dinámicamente controles a un formulario, cada vez que la cantidad de controles o su tipo es desconocido. Si su caso requiere de una cantidad variable de controles o de un tipo variable de controles, entonces su escenario aplica para la adición dinámica de controles.

    Jose R. MCP
    Code Samples

    martes, 3 de febrero de 2015 21:52
    Moderador
  • hola

    habria que ver que tan compleja es la logica, pero podrias crear un User Control por cada tipo del combo

    entonces en un Panel cargas como control un user control u otro segun la opcion seleccionada del combo

    sabes utilizar user controls ?

    sabes como agregarlos a un Panel usando el

    Panel1.Controls.Add(new UserControl1());

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 3 de febrero de 2015 22:17
  • Hola tengo un metodo

     private void SeleccionBusqueda()
            {
                int a = cmbSeleccion.SelectedIndex;
                switch (a)
                {
                    case 0:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                   
                    case 1:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 2:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 3:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 4:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 5:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 6:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 7:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                }
            }

    luego el metodo para cargar dinamicamente los controles

    private void CargaControlesNumeroActa() "Este es uno de los ejemplos"
            {
                Label lblNumeroActa = new System.Windows.Forms.Label();
                lblNumeroActa.Location = new System.Drawing.Point(14, 30);
                lblNumeroActa.Name = "lblNumeroActa";
                lblNumeroActa.Text = "Ingrese Numero de Acta";
                lblNumeroActa.AutoSize = true;
                groupBox1.Controls.Add(lblNumeroActa);

                TextBox txtNumeroActa = new System.Windows.Forms.TextBox();
                txtNumeroActa.Location = new System.Drawing.Point(148, 28);
                txtNumeroActa.Name = "txtNumeroActa";
                txtNumeroActa.Size = new System.Drawing.Size(110, 30);
                txtNumeroActa.TabIndex = 0;
                groupBox1.Controls.Add(txtNumeroActa);

                Button btnNumeroActa = new System.Windows.Forms.Button();
                btnNumeroActa.Location = new System.Drawing.Point(270, 28);
                btnNumeroActa.Name = "btnNumeroActa";
                btnNumeroActa.Text = "Buscar";
                btnNumeroActa.AutoSize = true;
                groupBox1.Controls.Add(btnNumeroActa);
                btnNumeroActa.Click += new EventHandler(btnNumeroActa_Click);
            }

    y luego llamo la consulta

    int buscar = Convert.ToInt32(txtNumeroActa.text); <== aqui no me reconoce el control
                context = new ctas_jud97Entities();
                var query = from c in context.fotomultas
                            where c.Num_Acta == buscar
                            select c;
                dataGridView1.DataSource = query;

    y tambien antes de cargar lo controles hago una limpieza

    private void RemoverControles()
            {
                int c = groupBox1.Controls.Count;

                for (int i = c - 1; i >= 0; i--)
                    groupBox1.Controls.Remove(groupBox1.Controls[i]);
            }

    si pudieran darme alguna ayuda les agradeceria

    miércoles, 4 de febrero de 2015 14:16
  • hola

    lo que yo proponia es que definas template segun cada tipo dentro de un user control donde puedes definir usando un diseñador

    entonces en lugar de cargar controles individuales simplemente carga uno solo el user control dentro de un Panel, asi segun la opcion

    por eso te decia que conoces los user controls?

    ------

    >>int buscar = Convert.ToInt32(txtNumeroActa.text); <== aqui no me reconoce el control

    y no lo va a reconocer si lo cread dinamicamente, vas a tener que localizarlo tambine de forma dinamica, si te animas con linq

    TextBox txtNumeroActa =  groupBox1.Controls.OfType<TextBox>().FirstOrDefault(x=> x.Name == "txtNumeroActa");

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta EnzoTuc40 miércoles, 4 de febrero de 2015 16:09
    miércoles, 4 de febrero de 2015 14:27
  • Hola,

    este código es muy ineficiente.

    private void SeleccionBusqueda()
            {
                int a = cmbSeleccion.SelectedIndex;
                switch (a)
                { 
                    case 0:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                   
                    case 1:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 2:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 3:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 4:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 5:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 6:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                    case 7:
                        RemoverControles();
                        CargaControlesSegunSeleccion
                        break;
                }
            }

    Como ves, haces lo mismo en cada uno de los case

    haz esto únicamente

    private void SeleccionBusqueda()
            {
                 RemoverControles();
                 CargaControlesSegunSeleccion();
                
            }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    miércoles, 4 de febrero de 2015 14:33
    Moderador

  • hola si acepto sugerencias vengo de vb6, 5, y anteriores ado dao y recorset hace un tiempo que vengo leyendo y tratando de asimilar estas tecnologias nuevas que desde la version visual studio 2003 ya venian cambiando logre hacer varias aplicaciones pasando por las versiones 2005,2008,2010,hasta 2012 y con ayuda, y aunque parezca raro me es mas facil entender c# que los nuevos vb las malas constumbres de programacion las arrastro tambien pero no soy terco y si me aconsejan o me sugieren ver tal o cual cosa lo hago como fue usar entity framework por eso estoy abierto a cualquier comentario que me hagan y de nuevo gracias
    miércoles, 4 de febrero de 2015 15:20
  • hola el codigo anterior cuando me referia "cargar controles segun seleccion" escribi un nombre generico pero cada case del swicht es apuntando a distintos metodos case 1 = metodo1 case 2 = metodo 2 y asi susesivamente lo unico que repite es remover controles que lo hago para limpiar el groupbox y cargar los nuevos controles segun el metodo seleccionado
    miércoles, 4 de febrero de 2015 15:28
  • >>por eso estoy abierto a cualquier comentario que me hagan

    analiza lo del user control

    lo agregas como un form es muy similar al ActiveX control antiguo de VB6, es un diseñador visual pero sin bordes ni barra de titulo

    alli diseñas segun cada tipo y luego cargas este user control segun la opcion del combo seleccionada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 4 de febrero de 2015 15:30
  • Hola leandro si entendi bien me recomiendas usercontrol o LINQ es asi ? a linq ya lo probe, y una ultima consulta

    solia hacer los programas con datos precargados y por ejemplo si en un formulario tenia un textbox con cliente

    al presionar sobre el textbox abria un formlario modal con un textbox de busqueda y un grid cuando se seleccionaba el dato requerido cerraba el formulario modal y pasaba el registro al textbox del formulario anterior esto en vb6 era sencillo si me puedes echar una luz sobre el tema en c# agradecido

    miércoles, 4 de febrero de 2015 15:48
  • Tengo varias aplicaciones corriendo y las estoy tratando de actualizar pero no me quiero alejar mucho del diseño anterior puesto que hay muchos usuarios que trabajan sobre estas aplicaciones desde hace mucho tiempo y seria mas complicado actualizarlos a ellos que a los programas
    miércoles, 4 de febrero de 2015 16:00
  • >>si entendi bien me recomiendas usercontrol o LINQ es asi ?

    user control si, linq depende, lo necesitas ? lo user control son independiente de linq

    >>si en un formulario tenia un textbox con cliente al presionar sobre el textbox abria un formlario modal con un textbox de busqueda y un grid cuando se seleccionaba el dato requerido cerraba el formulario modal y pasaba el registro al textbox

    esto tambine puede hacerlo en .net depende como lo quieras realizar quizas lo mas simple seria lanzar el form que actuara como popup de forma modal usando el ShowDialog() de esa forma cuando se cierra puedes tomar el valor selecionado y asignarlo al textbox

    imagino sabes que puedes hacer

    formPopup frm = new formPopup();
    
    if(frm.ShowDialog() == DialogResult.Ok){
    
       //aqui tomas el valor y lo asignas al textbox
    
    }


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 4 de febrero de 2015 16:27
  • Gracias lo voy a probar en cuanto al anterior quedo funcionando asi:

    TextBox txtNumeroActa = groupBox1.Controls.OfType<TextBox>().FirstOrDefault(x => x.Name == "txtNumeroActa");
                int buscar = Convert.ToInt32(txtNumeroActa.Text);
                
                context = new ctas_jud97Entities();
                var query = from c in context.fotomultas
                            where c.Num_Acta == buscar
                            select c;
                var foto = query.ToList();

                dataGridView1.DataSource = foto;

    miércoles, 4 de febrero de 2015 16:34
  • ahh a ese linq te referia, jeje, como habias comentado lo de user control no lo relacionada

    si usas controles dinamicos entonces si es bueno usar linq para localizarlos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 4 de febrero de 2015 16:45