Услуги Сертификаты Новости Статьи База знаний Алгоритмы Портфолио Скачать Ссылки Поиск
Услуги arrow Новости arrow WinForms C#: UserControls and DesignMode
WinForms C#: UserControls and DesignMode Версия для печати Отправить на e-mail
15.04.2012

Все, кто создает WinForms-приложения рано или поздно сталкиваются с необходимостью создать свой UserControl в момент разработки WinForms-приложения. В этом случае, компонент, чаще всего, требуется инстанцировать до момента заполнения его данными объекта (заполнить выпадающие списки справочниками, и т.д.).

Если вы решите инициализацию UserControl-а выполнить в его конструкторе, это приведет к ошибке в том случае, если вы в конструкторе разместите код обращения к источнику информации, например, к БД. Почему? Потому, что при попытке дизайнера форм нарисовать ваш UserControl на той форме, куда вы его поместите в будущем, будет вызван этот конструктор, что и приведет к ошибке в режиме дизайнера форм и вы не увидите объект вашего UserControl-а, вместо этого получите как минимум одну ошибку, что object is not initialized.

Также, подобная ситуация возникает, если нужно в UserControl создать свойство с атрибутом видимости public и это свойство выполняет какие-либо обращения к ресурсам, которые еще не существуют на этапе разработки.

Решение:

1. Если требуется создать public-свойство, но оно не должно быть видно в дизайнере форм, его нужно пометить атрибутами:

  1. Guid myproperty = Guid.Empty;
  2. [Browsable(false)]
  3. [EditorBrowsable(EditorBrowsableState.Never)]
  4. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  5. public Guid MyHiddenProperty
  6. {
  7.     get
  8.     {
  9.         return myproperty;
  10.     }
  11.     set
  12.     {
  13.         myproperty = value;
  14.         ReloadData();
  15.     }
  16. }

* This source code was highlighted with Source Code Highlighter.

2. Инициализировать UserControl данными можно в public-методе, который будет вызван из родительской формы или компонента, где будет расположен ваш UserControl. Если нужна инициализация с помощью источника информации, например БД, конструктор UserControl-а и метод обработки события OnLoad вашего UserControl-а для этих целей не годятся, как было указано выше.

PS: если Вам была полезна данная статья, поддержите наш ресурс, нажмите кнопочку "+1" вверху страницы. Спасибо!
Последнее обновление ( 15.04.2012 )
 
< Пред.   След. >