Comment utiliser l’événement Form.Load par rapport à sa méthode constructeur?

Lors de l’initialisation des propriétés de contrôles ou d’autres valeurs liées à un formulaire, j’ai tendance à basculer entre l’initialisation des valeurs dans le constructeur du formulaire, puis ultérieurement lorsque l’événement Form.Load est évoqué.

Quelle est l’utilisation généralement acceptée d’un constructeur de formulaires par rapport à son événement Form.Load? Avec d’autres classes, je ferais toute l’initialisation dans le constructeur. Pourtant, dans VS, lorsque vous double-cliquez sur un formulaire, vous accédez à un gestionnaire d’événements pour l’événement Form.Load, pas le constructeur. Cela me porte à croire qu’il est préférable de faire toute l’initialisation après l’événement Load plutôt que le constructeur.

Oui, c’est un peu sortingste que cela fonctionne de cette façon. Cela avait beaucoup de sens à l’époque, il y a 10 ans déjà. Windows Forms devait remplacer VB6, le concepteur d’interface utilisateur dominant à l’aide de pointer-cliquer à l’époque. Et Form_Load était important dans VB6, c’est là que vous avez personnalisé l’affichage du formulaire.

Ce n’était pas vraiment approprié dès le départ, la classe Form a un constructeur de sang pur. Et vous pouvez définir les propriétés du contrôle dans le constructeur avant la création du contrôle Window natif. Il y a une tonne de code dans WF pour que cela fonctionne. Code sur lequel le concepteur s’appuie, il définit ces propriétés avant le déclenchement de l’événement Load. Il est très efficace de le faire, de nombreux contrôles deviennent beaucoup plus lents s’ils doivent être mis à jour une fois leur fenêtre créée. Comme ListView et TreeView.

Il y a peu de raisons de ne pas utiliser le constructeur vous-même, comme le concepteur, d’autant plus que l’EDI C # n’essaie pas de cacher le constructeur. Sauf un: vous avez besoin de l’événement Load lorsque vous écrivez le type de code nécessitant de connaître la taille réelle du formulaire. Cette taille n’est pas connue jusqu’à ce que la fenêtre soit réellement créée, l’événement Load est le plus ancien qui soit. Cela devrait être rare.

Et bien sûr, si vous souhaitez utiliser Load, vous substituez OnLoad au lieu d’utiliser l’événement Load. Ce serait un autre.

Lorsque vous double-cliquez sur un contrôle du concepteur (y compris un formulaire), vous accédez au gestionnaire d’événements le plus courant pour ce contrôle. Cela ne signifie pas qu’il est préférable de faire quoi que ce soit là-bas – juste que quelqu’un l’a considéré comme le gestionnaire d’événements le plus probable.

L’événement Load un formulaire se produit généralement après la création de tous les contrôles. Le constructeur arrive avant. En fonction de la logique que vous implémentez, il peut s’avérer utile de gérer certaines opérations selon l’une ou l’autre méthode. Par exemple, il est préférable d’initialiser de nombreuses valeurs dans un constructeur: si les valeurs affectent la présentation ou le contenu du formulaire, vous pouvez être amené à créer une hiérarchie de contrôles “gaspillée” à reconstruire lorsque vous modifiez vos valeurs. Placer l’initialisation dans le constructeur peut permettre au formulaire de se construire correctement lui-même une première fois – ce qui est plus performant et peut éviter certaines erreurs.

En fin de compte, ces deux méthodes ont leur utilité: regardez ce que fait votre code et choisissez celle qui convient.

J’utilise toujours le constructeur et presque jamais l’événement form.Load sauf si je ne peux pas m’en sortir. La raison en est que le constructeur peut recevoir des parameters lorsque l’événement Load ne le peut pas vraiment.

C’est tellement plus utile