Jaki kod instalacyjny powinien znaleźć się w konstruktorach formularzy w porównaniu ze zdarzeniem ładowania formularza?

Dla aplikacji winforms zastanawiam się w jakim kodzie instalacyjnym powinien się znaleźć:

  • MainForm ()

W przeciwieństwie do

  • MainForm_Load (object sender, EventArgs e)

Czy są tu jakieś wytyczne dotyczące najlepszych praktyk?

Author: Amro, 2010-03-26

2 answers

Programiści pracujący z VB6 zazwyczaj umieszczają dużo kodu w zdarzeniu Load, w VB6 zdarzenie to zostało użyte do zainicjowania formularza. Ale to już nie jest odpowiednie w Windows Forms, Klasa formularza może mieć konstruktor. Metoda. NET polega na inicjalizacji obiektów klas w konstruktorze, istnieje bardzo niewiele ważnych powodów, aby tego nie robić dla klasy Form.

Zdarzenie Load uruchamia się zaraz po utworzeniu uchwytu okna dla formularza, tuż przed tym, jak stanie się on widoczny dla użytkownik. W programie obsługi zdarzenia należy pisać tylko kod, który zależy od tego, czy uchwyt został utworzony. Nie ma kodu, który kwalifikuje się do tego wymogu, z wyjątkiem jednego rodzaju: kodu, który wymaga poznania rozmiaru i lokalizacji okna.

Wartości właściwości design-time Size i Location formularza nie są takie same jak ich rzeczywiste wartości, gdy formularz działa na innej maszynie. Formularz może zostać przeskalowany w celu dostosowania do rozmiaru czcionki systemowej lub ustawienia DPI karty wideo na maszyna celownicza. Preferencje użytkownika również odgrywają pewną rolę, użytkownik mógł wybrać inny rozmiar czcionki dla podpisu okna. Zazwyczaj nie zależy ci na tym, chyba że chcesz, aby okno miało określoną pozycję na pulpicie lub było wyrównane do innego okna.

Pisanie kodu w zdarzeniu Load, które wykonuje czynności takie jak initialize TreeView lub ListView, może znacznie spowolnić czas uruchamiania. Gdy robisz to w konstruktorze, Windows Forms nie musi jeszcze aktualizować fizycznego okna, nie zostało jeszcze utworzone. Po utworzeniu natywnej kontrolki Winforms inicjalizuje ją zbiorczą aktualizacją zamiast jednego węzła/elementu na raz, co stanie się, gdy kod zostanie uruchomiony w zdarzeniu Load. Duża różnica.

Last but not least: nigdy nie należy używać zdarzenia Load, należy nadpisać metodę OnLoad (). Gwarantuje to, że kod będzie działał w przewidywalnej kolejności, gdy ty (lub ktoś inny) dziedziczysz z klasy formularza. IntelliSense pomaga piszesz tę metodę, po prostu wpisz "protected onl" i naciśnij tab, aby IntelliSense automatycznie uzupełniał metodę. Zauważ, że masz wybór, aby umieścić kod przed lub po podstawie.Onload () call, w ten sposób kontrolujesz, kto jest szefem. Jesteś szefem, gdy stawiasz go po, nie często prawidłowy wybór btw.

 69
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 12:28:35

Rzuć okiem na Użyj konstruktora w Windows Forms, aby zapewnić prawidłową inicjalizację

Użyj konstruktora w postaci Windows dla zapewnienia, że inicjalizacja jest zrobione jak należy. Kolejność odpalania zdarzeń jest nie jest nauką ścisłą i nie można zawsze zależy od kolejności, w jakiej zdarzenia ognia, niezależnie od tego, co Ty widziałem w przeszłości.

....

Z tego powodu Microsoft zaleca, aby obsługiwać kod inicjalizacyjny w Formularze Konstruktora, zakładając, że nie have a really time-comsuming inicjalizacja, która może uzyskać time-plaster lub do DoEvents ().

 9
Author: Adriaan Stander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-26 06:05:00