none
TableLayoutPanel y eventos independientes RRS feed

  • Pregunta

  • Que tal,

    Estoy trabajando con un tableLayoutPanel en c# windowsform 

    Manejo 2 formularios, en uno tengo un tableLayoutPanel (Form1), en el otro un boton una etiquita y un campo de texto (form2),

    mi intencion es insertar lo del form 2 dentro de cada campo del tablelayoutpanel del form 1 y lo logre de esta manera.

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                for (int x=0; x < 4; x++)
                {
                    Form2 vs = new Form2();
                    vs.TopLevel = false;
                    tableLayoutPanel1.Controls.Add(vs);
                    vs.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                    vs.Dock = DockStyle.Fill;                
                    vs.Show();
               }  

    }

    se ve algo asi:

    

    Pero necesito manejar eventos independientes en cada boton y cada campo de texto, de este modo todos son uno mismo

    alguna idea? gracias

    sábado, 4 de noviembre de 2017 18:08

Respuestas

  • Primero: No uses para eso un Form. En su lugar, utiliza un UserContol que precisamente sirve para eso. Añade al proyecto un nuevo UserControl, y pon dentro de él el label, el textbox y el botón, como si fura un form. Después compila el proyecto. Y una vez que lo hayas compilado, el UserControl aparecerá en la barra de herramientas y puedes arrastrarlo a tu tablelayoutpanel como si fuera cualquier control (o agregarlo por código si lo prefieres, de la misma manera que ahora estás agregando el form).

    Para el evento: declara un evento público dentro del código del UserControl. Después, en el click del botón, lo único que haces es disparar ese evento público. Y entonces, en el formulario que contiene el tablelayoutpanel con los usercontrols, a cada uno de ellos puedes conectarle un manejador distinto para ese evento que publicaste.

    Editado: Ejemplo de cómo declarar el evento:

    public class MiControl : UserControl
    {
        public event EventHandler BotonPulsado;
        //...
        private button1_Click(object sender, EventArgs e)
        {
            if (BotonPulsado != null)
            {
                BotonPulsado(this, e);
            }
        }
    }
    
    // Y en el formulario principal:
    miControl1.BotonPulsado += miManejador1;
    

    sábado, 4 de noviembre de 2017 19:41
    Moderador