2009-02-18 15 views
4

Dois-je charger des formulaires enfants dans le constructeur ou le FormLoad()?Pour Form Load() ou Not to Form Load()

J'ai du code qui appelle une classe personnalisée qui incorpore un formulaire dans un contrôle. J'avais été à l'origine de déclarer mes formulaires enfants en dehors du constructeur, puis appeler une routine FormPaint() dans le FormLoad() pour ensuite charger les formes comme ceci:

internal frmWWCMCPHost frmWWCMCPHost = new frmWWCMCPHost(); 
internal frmWWCEnrollmentHost frmWWCEnrollmentHost = new frmWWCEnrollmentHost(); 
internal frmWWCMemberHost frmWWCMemberHost = new frmWWCMemberHost(); 

public frmWWCModuleHost() 
{ 
    InitializeComponent();   
} 

private void frmWWCModuleHost_Load(object sender, EventArgs e) 
{ 
    FormPaint(); 
} 

public void FormPaint() 
{ 
    WinFormCustomHandling.ShowFormInControl(frmWWCMCPHost, ref tpgMCP, FormBorderStyle.FixedToolWindow,-4,-2); 
    WinFormCustomHandling.ShowFormInControl(frmWWCMemberHost, ref tpgMember, FormBorderStyle.FixedToolWindow, -4, -2); 
    WinFormCustomHandling.ShowFormInControl(frmWWCEnrollmentHost, ref tpgEnrollment, FormBorderStyle.FixedToolWindow, -4, -2); 

    // Call each top-Level (visible) tabpage's form FormPaint() 
    frmWWCMCPHost.FormPaint(); 
} 

Maintenant, j'ai montré une bien meilleure façon d'intégrer formulaires dans les contrôles de conteneur, en ce qui concerne ma classe personnalisée, here.

Ma question est où dois-je le chargement, comme l'exemple les a être chargé dans le constructeur en les déclarant en même temps, comme ceci:

public frmWWCModuleHost() 
{ 
    InitializeComponent(); 
    WinFormCustomHandling.ShowFormInContainerControl(tpgCaseNotes, new XfrmTest()); 
} 

Ce qui est, évidemment, beaucoup moins de code. En chargeant dans le constructeur vais-je utiliser beaucoup plus de ressources inutiles? Vais-je gagner quelque chose? Comment puis-je décider?

+0

+1 juste pour le titre créatif. –

Répondre

2

Question intéressante Mr_Mom. Ma recommandation serait d'utiliser vos constructeurs pour faire seulement la configuration nécessaire pour les sous-formulaires et de remettre les sous-formulaires en attente jusqu'au parent formLoad(). En ce qui concerne les ressources, les gains, et les pertes ... Je ne sais pas.

2

La réduction de la complexité vers l'extérieur augmentera la lisibilité et devrait réduire les erreurs possibles.

+0

Pouvez-vous élaborer en ce qui concerne ma question? Je ne suis pas sûr de ce que vous me conseillez de faire pour placer ceci dans le constructeur ou FormLoad()? –

+0

Dans le constructeur, puisqu'ils font partie du formulaire. Définition des options de variable dans Form Load. – sfossen

+0

donc cerate les formes dans le constructeur mais fait n'importe quoi d'autre avec eux dans le formulaire(). Merci –

2

Sur une tangente, ne jamais relancer une exception en utilisant throw ex; Cela réinitialisera la pile d'appels. Utilisez juste jeter;

+0

Merci! Je devrais juste laisser comme jeter alors? –

+0

Vous ne devriez jamais attraper (Exception) et rejeter, jamais, non plus; c'est inutile. –

+0

Donc, je ne devrais même pas essayer, attraper ici? –

4

Je préfère utiliser le constructeur de formulaire. Je veux dire configurer tout avant un formulaire serait montré, pas après.