2008-11-05 2 views
9

Когда форма загружается, код должен делать такие вещи, как установочные datagrids, comboboxes, установить заголовок и т. Д. Я обычно использовал событие load, а не новый (конструктор). Существуют ли какие-либо рекомендации, для которых лучше всего заниматься какой-либо деятельностью?Winforms Form Constructor vs Load event

+0

Возможный дубликат [Какой код установки должен идти в конструкторе форм по сравнению с событием загрузки формы?] (Http://stackoverflow.com/questions/2521322/what-setup-code-should-go-in-form-constructors- versus-form-load-event) – 2016-09-02 08:31:34

ответ

0

В принципе, вы хотите, чтобы ваш конструктор был максимально легким. Я пытаюсь поместить большинство вещей в обработчик события загрузки, поскольку элементы пользовательского интерфейса были созданы и могут использоваться в это время. Однако я обычно создаю объекты класса и т. Д. В конструкторе, поскольку он фактически является частью построения объекта. Иногда вы не можете помещать вещи в одно место или другое, но на время, когда можете, вы должны просто поместить их там, где это кажется наиболее подходящим.

+0

Читайте здесь, почему наоборот: http://stackoverflow.com/a/2522999/4136325 – 2016-09-02 08:34:27

2

Вызов InitializeComponent автоматически вставляется в конструктор вашей формы/страницы. InitializeComponent является автоматически сгенерированный метод, который

  • создает различные элементы пользовательского интерфейса на странице/XAML Winform
  • инициализирует их свойства значений, хранящихся в файле ресурсов

Так что связано с UI расположение/модификации должны идти после этот звонок. Когда вы делаете это в переопределении Form.OnLoad, вы уверены, что пользовательский интерфейс готов к работе (InitializeComponent был вызван) ... поэтому я проголосовал за использование OnLoad для интерфейса.
Создание элементов, не являющихся членами UI, конструктором было бы местом, на котором я сначала посмотрел бы.

1

Имейте в виду, что что-либо в конструкторе формы будет создано/выполнено при создании этих форм. т. е. при:

Форма frm = новая форма();

Принимая во внимание, что что-либо в событии загрузки произойдет только в том случае, если форма показана i.e. frm.Show();

+0

Обратите внимание, что есть также событие Shown. Событие загрузки происходит до того, как будет отображаться форма, но когда окно существует и макет выполнен. – 2016-09-02 08:33:08