2010-08-16 16 views
6

Necesito crear una instancia de Winform dentro de otro proyecto. ¿Cómo se hace esto? Actualmente estoy intentando encadenar el constructor predeterminado. Parece que mi constructor personalizado no es llamado.¿Cómo uso un constructor personalizado en un WinForm?

Además ... el punto de entrada para esta aplicación no estará en el proyecto que posee este formulario. Lo que significa lo siguiente no se ejecutará:

Application.EnableVisualStyles(); 
Application.SetCompatibleTextRenderingDefault(false); 
Application.Run(new HtmlTestForm()); 

No estoy del todo seguro de lo que está haciendo este código. ¿La forma todavía funcionará?

private HtmlTestForm() 
     { 
      InitializeComponent(); 
      OpenBrowser(new Uri(TestURL)); 
     } 

public HtmlTestForm(Uri uri) 
      :this() 
     { 
      TestURL = uri; 
     } 

// Nuevo formulario en otro proyecto.

HtmlTestForm form = new HtmlTestForm(new Uri("http://SomeUri.html")); 

Respuesta

8

El formulario funcionará.
Sin embargo, TestURL solo se asignará después de la llamada OpenBrowser. (: this() ejecutará todo el constructor predeterminado primero)

En su lugar, probablemente debería llamar al InitializeComponent por separado en su constructor personalizado y no encadenarlo al predeterminado.

. Las clases de formulario de Net son clases normales que contienen un método generado automáticamente llamado InitializeComponent.
No tienen ningún magic que deba tener en cuenta (a diferencia de VB6); siempre que comprenda el propósito de InitializeComponent (lea su fuente), puede hacer lo que quiera con ellos.

+0

El único aspecto "mágico" involucrado es que los formularios son creados automáticamente por el diseñador de Windows Forms ... que requiere un constructor sin parámetros, creo. –

+2

@Jon: No, no es así. El diseñador solo crea una instancia de su formulario si abre un formulario que hereda de él en la vista Diseño. Si no hereda de su formulario, no necesita un constructor sin parámetros. – SLaks

+0

Dios mío, son buenas noticias. Editaré la respuesta cuando tenga la oportunidad. –

Cuestiones relacionadas