Директива препроцессора "Режим проектирования"
У меня есть проблема при отображении компонента в Designer.
Я определил "плохой" код, который не нравится дизайнеру.
Теперь проблема заключается в том, что я не могу "прокомментировать" ее для времени разработки только с помощью препроцессорных директив.
Теперь я попробовал (для VB.NET) следующий
#If Not Debug Then
Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent
...
#End If
этот... работал, и теперь он отображается без проблем в дизайнере.
Проблема теперь, когда я боюсь, не сможет отлаживать правильно этот компонент.
Итак, я ищу обходное решение à la
#If Not DESIGN_TIME Then
#End If
Есть ли что-то подобное?
Ответы
Ответ 1
Вы не можете добиться этого через препроцессор. Это связано с тем, что вы можете запустить исполняемый файл отладки вне VS (попробуйте, дважды щелкните EXE, сгенерированный VS в режиме отладки).
Во всяком случае, существует свойство runtime (не на основе препроцессора), которое может помочь:
if (System.ComponentModel.LicenseManager.UsageMode ==
System.ComponentModel.LicenseUsageMode.Designtime)
Эти веб-страницы помогут и имеют другие методы проверки для режима разработки во время выполнения:
http://msdn.microsoft.com/en-us/library/c58hb4bw(vs.71).aspx
http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx
Ответ 2
IDE не перестраивает ваш код, чтобы показать конструктор. Он использует бинарный файл, который вы уже создали. Поэтому директива препроцессора не поможет.
Поскольку вы упоминаете myWpfComponent_ItsEvent
, я предполагаю, что это вопрос WPF. В WPF вы обнаруживаете режим разработки, используя GetIsInDesignMode.
Ответ 3
Использование:
if (!DesignerProperties.GetIsInDesignMode(this))
{
//Code to not execute in design mode
}
Обратите внимание, что идентификатор "this" может быть любым DependencyObject
Ответ 4
Ваша проблема заключается в использовании элемента управления WPF, написанного на VB.NET в дизайнере WinForms. Если обработчик события вызывает проблемы, вы можете использовать AddHandler
вместо WithEvents
и Handles
для условного кода вашего обработчика. Когда вы используете AddHandler
, вы можете обернуть добавление обработчика в If
, используя методы, описанные в ответе @gmagana.
См. этот ответ для разницы между дескрипторами и AddHandler: