Какой код установки должен входить в конструкторы форм по сравнению с событием загрузки формы?


для приложений winforms мне интересно, какой код установки должен входить:

  • MainForm ()

в противоположность

  • MainForm_Load (отправитель объекта, EventArgs e)

есть ли здесь какие-либо рекомендации по лучшей практике?

2   51   2010-03-26 08:43:25

2 ответа:

программисты, которые работали с VB6, как правило, помещают много кода в событие Load, в VB6 это событие было использовано для инициализации формы. Но это больше не подходит в Windows Forms, класс Form может иметь конструктор. Способ .NET заключается в инициализации объектов класса в конструкторе, есть очень мало веских причин не делать этого для класса формы.

событие Load запускается сразу после того, как дескриптор окна для формы был создан, непосредственно перед тем, как он станет видимым для пользователь. Вы должны писать код только в обработчике событий, который зависит от того, что дескриптор создан. Существует не загрузка кода, который соответствует этому требованию, за исключением одного вида: код, который требует, чтобы размер и расположение окна были известны.

значения свойств размера и расположения во время разработки формы не совпадают с их фактическими значениями, когда форма выполняется на другой машине. Форма может быть масштабирована в соответствии с размером шрифта системы или настройкой DPI видеоадаптера на целевой машине. Пользовательские настройки также играют определенную роль, пользователь может выбрать другой размер шрифта для заголовка окна. Обычно вы не заботитесь ни о чем из этого, если вы не хотите, чтобы окно имело определенную позицию на рабочем столе или было выровнено с каким-либо другим окном.

написание кода в событии загрузки, которое выполняет такие действия, как инициализация элементов управления TreeView или ListView, может значительно замедлить время запуска. Когда вы делаете это в конструкторе, Windows Forms пока не нужно обновлять физическое окно, оно еще не создано. После создания собственного элемента управления Winforms инициализирует его массовым обновлением вместо одного узла / элемента за раз, как это будет происходить при запуске кода в событии Load. Большой перепад.

последнее, но не менее важное: вы никогда не должны использовать событие Load, вы должны переопределить метод OnLoad (). Это гарантирует, что код выполняется в предсказуемом порядке, когда вы (или кто-то другой) наследует от класса формы. IntelliSense поможет вам написать этот метод, просто введите "protected onl" и нажмите tab, чтобы IntelliSense автоматически завершил метод. Обратите внимание, как у вас есть выбор, чтобы поместить код до или после базы.Onload () вызов, вот как вы контролируете, кто является боссом. Вы босс, когда вы ставите его после, не часто правильный выбор Кстати.

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

использовать конструктор в форме Windows для обеспечения инициализации сделанный правильно. Порядок обработки событий не точная наука, и вы не можете всегда зависит от того, в котором событий, независимо от того, что вы видели в прошлом.

....

по этой причине Microsoft рекомендует вам ручка код инициализации в формах Конструктор, предполагая, что вы не есть действительно время-потребление инициализация, которая может получить время-нарезанный или сделать DoEvents ().