Form_Load () ‘event’ или Override OnLoad ()

Я хотел бы, чтобы кто-то попытался объяснить разницу между ними. Более конкретно, пример использования сценария.

Я переформатирую некоторый код Windows Form, а Form имеет некоторый код в Form_Load() а также в protected override void OnLoad() событии protected override void OnLoad() которое вызывает base.OnLoad(e); Теперь я проследил его, и сначала переопределяет огонь, а затем немедленно запускает версию события.

Итак, какой из них обычно используется и почему?

Вы всегда должны переопределять OnLoad (). Использование события подходит только тогда, когда другой class будет интересоваться событием. Для чего предназначены события. Другой class, интересующийся событием Load, очень редок, только очень полезен для создания компоновки окон.

Тем не менее, событие Load хорошо работает с дизайнером, а программисты VB6 очень довольны им. Это не ужасно неправильно, вы столкнулись бы с проблемой, когда начнете наследовать форму, а код не будет работать в правильном порядке.

Большинство кода, которые теперь помещаются в событие Load, действительно принадлежат конструктору. Вам нужно только OnLoad, если:

  • Вы должны знать точный размер и положение windows. Лучше всего использовать OnLoad, создается дескриптор windows и применяются предпочтения пользователя (размер заголовка и границы), и форма была перемасштабирована по указанию свойства Form.AutoScaleMode. Окно еще не видно, очень хорошее время, чтобы переместить окно в другое место или организовать дочерние элементы управления.
  • У вас есть код, которому требуется свойство Handle. Это тонко, вы не всегда можете сказать. Наличие кода в конструкторе нездорово, окно создается до завершения конструктора. Это, как правило, подходит к концу, но может создать очень медленную форму. Легко диагностировать из windows «Стек вызовов».
  • Чтобы избежать ошибки в реализации MDI. Если вы создаете дочерний MDI в родительском конструкторе, вы получите дублированные глифы, видимые при максимальном увеличении числа дочерних элементов. Вместо этого создайте дочерний элемент в OnLoad.

При переопределении OnLoad вызов base.OnLoad вызывает Load -event формы.

 protected override void OnLoad(EventArgs e) { // do stuff before Load-event is raised base.OnLoad(e); // do stuff after Load-event was raised } 

Если вам не нужно выполнять какие-либо действия до того, как событие Load-event будет поднято, поместите код в OnLoad после base.OnLoad(e) дает такое же поведение во время выполнения, что и его размещение в Form_Load событий Form_Load .

Я бы рекомендовал переопределить метод, а не подписываться на это событие.

OnLoad вызывает событие Load , которое обрабатывает Form_Load . См. Статью MSDN .

Итак, в вашем коде, в конце вашей функции инициализации, вы можете вызвать функцию OnLoad . Затем базовый class вызовет обработчики событий ( Form_Load в этом случае), которые вы, возможно, установили в своем коде инициализации.

Лично я Form_Init свой код в Form_Init и оставил OnLoad для инициирования события, так как я обрабатываю событие, хотя вы можете защищать либо по уважительной причине, как вы видите из своих ответов.

  • Получение событий из базы данных
  • Пользовательский прослушиватель событий Android
  • Вставить событие в текстовом поле WPF
  • Окончательный способ запуска событий нажатия клавиш с помощью jQuery
  • C #: создание унаследованного события
  • Создание пользовательского события в Java
  • Как обеспечить, чтобы событие было подписано только один раз
  • Есть ли недостаток в добавлении анонимного пустого делегата в объявление события?
  • Как обрабатывать событие добавления в список?
  • Остановить распространение событий мыши в угловом
  • C #: Разница между '+ = anEvent' и '+ = new EventHandler (anEvent)'
  • Давайте будем гением компьютера.