Konstruktor oder Load Ereignis ???



  • Hallo,

    ich muss mich seit langer Zeit mal wieder (und dieses mal etwas intensiver) mit C# beschäftigen.
    Was würdet Ihr sagen, was ist die "best practise" um beim Start einer WindowsForms Anwendung ein paar Objekte innerhalb der Klasse des Hauptformulars zu instanziieren.

    - Im Konstruktor
    - Im Load Ereignis

    macht es bei von "System.Windows.Forms.Form" abgeleiteten Klassen überhaupt einen Unterschied?

    public partial class FrmMain : Form
      {
        MyClass1 obj1 = null;
        MyClass2 obj2 = null;
    
        public FrmMain()
        {
          InitializeComponent();
    
          obj1 = new MyClass1();
          obj2 = new MyClass2();
        }
    

    Oder besser

    public partial class FrmMain : Form
      {
        MyClass1 obj1 = null;
        MyClass2 obj2 = null;
    
        public FrmMain()
        {
          this.Load += new EventHandler(FrmMain_Load);
          InitializeComponent();
        }
    
        void FrmMain_Load(object sender, EventArgs e)
        {
          obj1 = new MyClass1();
          obj2 = new MyClass2();
        }
    


  • Ich habe jetzt mal ein bisschen rum gespielt.
    Es verhält sich zumindest wie erwartet.

    Der Konstruktor wird beim Instanziieren auferufen.
    Das Load Event wird beim 1. Anzeigen des Form's getriggert "Form.show()".
    Danach kann man es so oft verstecken und wieder herzeigen wie man will, das Load Event wird nicht mehr getriggert.

    public partial class Form1 : Form
      {
        Form2 objForm = null;
        public Form1()
        {
          InitializeComponent();
          objForm = new Form2();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          objForm.Show();
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
          objForm.Hide();
        }
      }
    
    public partial class Form2 : Form
      {
        public Form2()
        {
          InitializeComponent();
          this.Load += new EventHandler(Form2_Load);
          MessageBox.Show("OnConstructor");
        }
    
        void Form2_Load(object sender, EventArgs e)
        {
          MessageBox.Show("OnLoad");
        }
      }
    

    Schein in C# irgendwie Geschmackssache zu sein.
    Ich habe mich jetzt für den Konstruktor entschieden.



  • Generell ist der Konstruktor für Initialisierungen von Klassenvariabeln (in deinem Fall die Objekte) da.
    Im OnLoad-Event kannst du Methoden etc aufrufen, diese haben im Konstruktor nichts zu suchen.
    Hoffe, das hilt dir 🙂



  • Ich würde es auch im Konstruktor machen.
    Und auch schon deswegen weil wenn du mach auf die Idee kommst einen Splash Screen einzufügen dann wird dieser so lange angezeigt bis der Konstruktor durch ist.



  • secondsun schrieb:

    Ich würde es auch im Konstruktor machen.
    Und auch schon deswegen weil wenn du mach auf die Idee kommst einen Splash Screen einzufügen dann wird dieser so lange angezeigt bis der Konstruktor durch ist.

    Die Einbindung eines SplashScreens ist meiner Meinung besser im Load_Event aufgehoben.

    Ansonsten:
    - Kontruktor: allein für elementare Dinge
    - Load: sobald Methoden zur Vorbereitung erforderlich sind



  • Ja vielleicht das manuelle einbinden eines Splash Screens aber es gibt in den Visual Studios die Möglichkeit eine Grafig bzw Bild als Splachscreen zu markieren. Und dann ist es eben nicht mit dem OnLoad Event getan



  • Grafik natürlich


Anmelden zum Antworten