2009-02-19 30 views
5

Quiero agregar un control a un control de usuario en un controlador de eventos (como un evento de clic de botón).Agregar controles dinámicamente a controles de usuario

Estoy tratando de agregar un control de búsqueda DataGridView dinámicamente, pero no pude conseguir que funcione, así que traté sólo añadir un botón con este código:

private void btnCreateNewButton_Click(object sender, EventArgs e) 
{ 
    Button btn = new Button(); 
    btn.Location = new Point(100, 640); 
    btn.Size = new Size(100, 30); 
    btn.Text = "Click Me"; 
    btn.Click += (s, ea) => MessageBox.Show("New button clicked"); 
    this.Controls.Add(btn); 
} 

Cuando hago clic en mi Crear nuevo Botón, no aparece ningún botón.

Si agrego exactamente el mismo código en un formulario en lugar de un control de usuario, el botón se crea y muestra como se esperaba, pero en el control de usuario no ocurre nada. En el control de usuario También he intentado

this.Parent.Controls.Add(btn) and 
this.ParentForm.Controls.Add(btn) 

pero fue en vano.

¿Alguien tiene alguna idea?

Gracias, Ciaran.

+0

La primera versión (this.Controls.Add) simplemente funciona bien ... Si el UserControl es más alto que 640 –

Respuesta

1

Usted coloca su botón en 100,640 punto. Asegúrese de que su control de usuario pueda acomodar su botón dinámico. De lo contrario, no lo verás. Utilicé su código y funcionó bien para mí, solo asegure el tamaño adecuado tanto de la forma principal como del control del usuario.

+1

Gracias por eso, se mostraba debajo del control por alguna razón. Necesitaba llamar a BringToFront() –

1

Lo más probable es que su botón se encuentre fuera de los límites del control principal y/o detrás de otro control. No creo que los UserControls o Formularios sean especiales con respecto a la adición de controles en tiempo de ejecución, pero una diferencia simple puede ser que los Formularios son por defecto redimensionables, mientras que los UserControls no lo son. De cualquier manera, no creo que ninguno de los tipos de control cambie el tamaño automáticamente para que quepan todos sus controles secundarios, por lo que es bastante fácil colocar un control nuevo/dinámico en el lugar incorrecto y no ser visible.

Cuestiones relacionadas