Директива препроцессора «Режим проектирования» - PullRequest
10 голосов
/ 27 января 2011

У меня проблема при отображении компонента в Designer.

Я обнаружил «плохой» код, который не нравится конструктору.

Теперь проблемав том, что я не могу «комментировать» это для времени разработки только с помощью директив препроцессора.

Теперь я попробовал (для VB.NET) следующее

#If Not Debug Then
Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent
...
#End If 

это ... сработало, и теперь он отображается без проблем в конструкторе.

Проблема теперь, когда я боюсь, что я не могу отладить должным образом этот компонент.

Итак, яищу обходной путь а-ля

#If Not DESIGN_TIME Then
#End If 

Есть ли что-то подобное?

Ответы [ 4 ]

9 голосов
/ 27 января 2011

Вы не можете достичь этого через препроцессор.Это связано с тем, что вы можете запустить отладочный исполняемый файл вне VS (попробуйте дважды щелкнуть на EXE-файле, сгенерированном VS в режиме отладки).

В любом случае, существует свойство времени выполнения (не на основе препроцессора), которое может помочь:

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

4 голосов
/ 28 января 2011

IDE не перестраивает ваш код, чтобы показать дизайнер.Он использует двоичный файл, который вы уже создали.Так что директива препроцессора не поможет.

Поскольку вы упомянули myWpfComponent_ItsEvent, я предполагаю, что это вопрос WPF.В WPF вы определяете режим разработки с помощью GetIsInDesignMode .

3 голосов
/ 25 июля 2012

Использование:

if (!DesignerProperties.GetIsInDesignMode(this))
{
   //Code to not execute in design mode
}

Обратите внимание, что идентификатором "this" может быть любой DependencyObject

2 голосов
/ 28 января 2011

Ваша проблема заключается в использовании элемента управления WPF, написанного на VB.NET в конструкторе WinForms.Если обработчик событий вызывает проблемы, вы можете использовать AddHandler вместо WithEvents и Handles, чтобы обусловить код вашего обработчика.Как только вы используете AddHandler, вы можете добавить обработчик в If, используя методы, описанные в ответе @ gmagana.

См. В этом ответе разницу между Handles и AddHandler:

...