Использование события Load для инициализации формы - анахронизм VB6 дней. Тогда было действительно важно, что, к сожалению, перенесено в дизайн дизайнера Winforms. Это заставило Загрузить событие по умолчанию для формы.
Это, однако, не так. NET, вы инициализируете объект класса с помощью конструктора. только раз, когда вам нужно переопределить OnLoad () (другой способ .NET, события для кода в других классах), когда вы заботитесь о размере и положении формы. Это не будет размер и расположение дизайна, когда пользователь изменил тему Windows или запустит видеоадаптер с более высоким значением DPI. Поэтому вы можете использовать OnLoad для перемещения окна или перестановки элементов управления. На самом деле это не очень распространенная вещь.
Итак, исправьте вашу проблему first , используя вместо этого конструктор. Если вам все еще нужен OnLoad, просто используйте флаг bool, который отслеживает, запущен ли он или нет.
private bool initialized = false;
protected override void OnLoad(EventArgs e) {
if (!initialized) {
initialized = true;
// etc...
}
base.OnLoad(e);
}
И да, это работает, только если вы используете ShowDialog (). Форма, отображаемая с помощью Show (), автоматически удаляется, когда она закрыта. Этого не происходит с ShowDialog (), чтобы избежать проблем с получением результатов диалога. Воссоздание экземпляра диалога - лучший способ, если только вы действительно не позаботитесь о сохранении последних введенных значений. Это, однако, очень дорогой способ сделать так, чтобы объекты форм занимали много ресурсов .NET и Windows.