2010-08-16 18 views
6

Ho bisogno di creare un'istanza di Winform all'interno di un altro progetto. Come è fatto? Attualmente sto tentando di collegare il costruttore predefinito. Sembra che il mio costruttore personalizzato non venga chiamato.Come si utilizza un costruttore personalizzato in un WinForm?

Inoltre .. il punto di ingresso per questa applicazione non sarà nel progetto che possiede questo modulo. Significato il seguente non verrà eseguito:

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

Non sono del tutto sicuro di cosa stia facendo questo codice. La forma funzionerà ancora?

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

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

// Nuovo modulo in un altro progetto.

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

risposta

8

Il modulo funzionerà.
Tuttavia, TestURL verrà assegnato solo dopo la chiamata OpenBrowser. (: this() per prima cosa eseguirà l'intero costruttore predefinito)

Invece, dovresti probabilmente chiamare InitializeComponent separatamente nel costruttore personalizzato e non concatenarlo al valore predefinito.

. Le classi di modulo net sono classi normali che contengono un metodo generato automaticamente chiamato InitializeComponent.
Non hanno alcuna magia da tenere a mente (diversamente da VB6); Se capisci lo scopo di InitializeComponent (leggi l'origine), puoi fare tutto ciò che vuoi con loro.

+0

Un po 'di "magia" coinvolta è che i moduli vengono creati automaticamente dal designer di Windows Form ... che richiede un costruttore senza parametri, credo. –

+2

@Jon: No, non è così. Il designer crea un'istanza del modulo solo se si apre un modulo che eredita da esso in visualizzazione Struttura. Se non si eredita dal modulo, non è necessario un costruttore senza parametri. – SLaks

+0

cavolo, questa è una buona notizia. Modifica la risposta quando ne ho la possibilità. –

Problemi correlati