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

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

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

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

3 Solutions collect form web for “Form_Load () ‘event’ или Override OnLoad ()”

Вы всегда должны переопределять 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 для инициирования события, так как я обрабатываю событие, хотя вы можете защищать либо по уважительной причине, как вы видите из своих ответов.

  • C #: Разница между '+ = anEvent' и '+ = new EventHandler (anEvent)'
  • Пользовательский прослушиватель событий Android
  • AddEventHandler с использованием отражения
  • Как разобрать JSON с Objective-C?
  • C # передача дополнительных параметров обработчику событий?
  • Как обеспечить, чтобы событие было подписано только один раз
  • jQuery - событие триггера, когда элемент удален из DOM
  • Плохо ли не отменять регистрацию обработчиков событий?
  • Остановить распространение событий мыши в угловом
  • Interesting Posts

    Откройте файл PDF внутри веб-представления.

    Android Recyclerview vs ListView с Viewholder

    Есть ли способ разместить две страницы на одной странице в MS Excel при печати?

    Почему драйверы меняются из разных версий Windows?

    Усечение Десятичное число не округлено

    Как вы проверяете, играет ли музыка с помощью широковещательного приемника?

    Не удалось использовать ручку после очистки после использования командной строки

    В чем разница между прошивкой и программным обеспечением / ОС?

    Как обрезать пробелы из строки Python?

    Есть ли более быстрый способ открыть процесс как администратор (с включенным UAC)?

    Могу ли я маскировать входной текст в файле bat?

    Не удалось выполнить обновление до Windows 8.1 / 10

    Приложение панели вкладок с controllerом навигации

    Android: вызывать активность другого приложения

    Заставить IE использовать один процесс за вкладку

    Давайте будем гением компьютера.