2010-02-19 44 views

Respuesta

44

En pocas palabras:

controles de usuario son una forma de hacer una costumbre, el componente reutilizable. Un control de usuario puede contener otros controles pero debe estar alojado en un formulario.

Los formularios de Windows son el contenedor de los controles, incluidos los controles de usuario. Si bien contiene muchos atributos similares como un control de usuario, su propósito principal es alojar controles.

+0

¿Pueden los controles de usuario hospedar (contener) otros controles de usuario? –

+0

@RobertNiestroj sí pueden. – LxL

4

Un formulario de Windows es un contenedor para controles de usuario.

+3

así es un control de usuario! –

+0

¿cómo se pone un formulario en un control de usuario? – Fredou

+1

no puede, pero seguro puede poner un control de usuario en un control de usuario. –

17

Tienen un lote en común, ambos se derivan de ContainerControl. Sin embargo, UserControl está diseñado para ser una ventana secundaria, debe colocarse en un contenedor. El formulario fue diseñado para ser una ventana de nivel superior sin un padre.

En realidad se puede convertir un formulario en una ventana secundaria estableciendo su propiedad TopLevel false:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     var child = new Form2(); 
     child.TopLevel = false; 
     child.Location = new Point(10, 5); 
     child.Size = new Size(100, 100); 
     child.BackColor = Color.Yellow; 
     child.FormBorderStyle = FormBorderStyle.None; 
     child.Visible = true; 
     this.Controls.Add(child); 
    } 
} 
+3

Pero realmente deberías evitar hacerlo, IMO. :) –

+0

Hay un poquito de memoria que usará innecesariamente, cacahuetes muy pequeños en comparación con el costo de la clase Control y especialmente la ventana nativa. Hubiera sido muy fácil para Microsoft no exponer la propiedad TopLevel. La característica es simplemente oscura, usarla está bien. –

+0

Supongo que estaba hablando desde el punto de vista de la claridad y composición del código. Claro, puedes hacer esto, y seguro, es compatible, pero creo que mi punto era no tomar este buen ejemplo como un patrón de diseño :) –

0

La mayor diferencia es form.show da una ventana diferente mientras duerma usercontrol tiene como característica apareciendo sin padre. Las cosas de reposo son las mismas en los controles como beind derivados de Scrollablecontrol.

Cuestiones relacionadas