2008-11-05 11 views
9

Kiedy formularz się ładuje, kod musi wykonać takie czynności, jak konfigurowanie datagridów, comboboxów, ustawianie tytułu itp. Zawsze korzystałem raczej z zdarzenia load niż z nowego (constructor). Czy istnieją jakieś wytyczne, które najlepiej pasują do jakich działań?Winforms Form Constructor vs Load event

+0

Możliwy duplikat [Jakiego kodu instalacyjnego należy użyć w zdarzeniu Form Constructors kontra Form Load?] (Http://stackoverflow.com/questions/2521322/what-setup-code-should-go-in-form-constructors- versus-form-load-event) –

Odpowiedz

0

Zasadniczo chcesz, aby Twój konstruktor był tak lekki, jak to tylko możliwe. Próbuję umieścić większość rzeczy w module obsługi zdarzeń Load, ponieważ elementy interfejsu użytkownika zostały utworzone i są obecnie użyteczne. Jednak zazwyczaj konstruuję instancje obiektów klas itp. W konstruktorze, ponieważ jest to faktycznie część konstrukcji obiektu. Czasami nie możesz umieścić rzeczy w jednym miejscu lub w innym, ale w czasie, gdy możesz, po prostu umieść je tam, gdzie wydaje się najbardziej odpowiednie.

+0

Przeczytaj tutaj, dlaczego przeciwieństwo jest lepsze: http://stackoverflow.com/a/2522999/4136325 –

2

Wywołanie InitializeComponent jest automatycznie wstawiane do konstruktora formularza/strony. InitializeComponent jest metoda generowane automatycznie, że

  • tworzy różne elementy interfejsu użytkownika na swojej stronie/XAML winform
  • inicjuje ich właściwości z wartościami zapisanymi w pliku zasobów

Więc wszystko związane z UI układ/modyfikacje powinny przejść po tym połączeniu. Kiedy robisz to w zastąpieniu Form.OnLoad, masz pewność, że interfejs jest gotowy do pracy (został wywołany InitializeComponent) ... więc głosowałbym za trzymaniem się OnLoad dla interfejsu użytkownika.
Tworzenie członków spoza UI, konstruktor będzie miejscem, na które pierwszy raz patrzę.

1

Należy pamiętać, że podczas tworzenia formularzy zostanie utworzony/wykonany cokolwiek w konstruktorze formularza. tj. pod adresem:

Forma frm = new Form();

Podczas gdy cokolwiek w zdarzeniu Load nastąpi tylko wtedy, gdy formularz jest przedstawiony tj. frm.Show();

+0

Pamiętaj, że istnieje również zdarzenie Shown. Zdarzenie load występuje przed wyświetleniem formularza, ale gdy okno istnieje i układ został wykonany. –