Как вы справляетесь с исключениями в конструкторах UserControls при использовании .net Winform Designer? - PullRequest
3 голосов
/ 26 января 2009

Когда вы загружаете UserControl в конструкторе WinForm, VisualStudio выполняет метод InitializeComponent () элемента управления, но не его конструктор. Это действительно имеет значение, потому что довольно часто в конструкторе есть некоторый код, который не может быть запущен во время разработки.

К сожалению, когда вы добавляете UserControl в другой элемент управления, VisualStudio запускает метод InitializeComponent () родительского элемента управления, который вызывает конструкторы дочерних элементов управления, и если у вас есть исключение в этих конструкторах, вы stucked.

Как вы справляетесь с этой проблемой?

Ответы [ 4 ]

2 голосов
/ 26 января 2009

обернуть части только для выполнения:

If Not me.DesignMode Then
  'Runtime only here
End If
1 голос
/ 30 ноября 2011

Я нашел решение в CodeProject , которое работает для меня:

if (System.ComponentModel.LicenseManager.UsageMode != 
    System.ComponentModel.LicenseUsageMode.Designtime)
{
    // Runtime only here
}
0 голосов
/ 26 января 2009

Почему бы не использовать OnLoadEvent в этом сценарии?

0 голосов
/ 26 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...