“设计模式”预处理器指令

时间:2011-01-27 20:49:28

标签: .net wpf visual-studio visual-studio-2010 preprocessor

我有一个problem在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 个答案:

答案 0 :(得分:9)

您无法通过预处理器实现此目的。这是因为您可以在VS之外运行调试可执行文件(尝试它,在调试模式下双击VS生成的EXE)。

无论如何,有一个运行时(不是基于预处理器的)属性可能会有所帮助:

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

答案 1 :(得分:4)

IDE不会重建代码以显示设计器。它使用您已经构建的二进制文件。因此预处理器指令无济于事。

由于你提到myWpfComponent_ItsEvent,我认为这是一个WPF问题。在WPF中,您使用GetIsInDesignMode检测设计模式。

答案 2 :(得分:3)

使用:

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

请注意,“this”标识符可以是任何DependencyObject

答案 3 :(得分:2)

您的问题是在WinForms设计器中使用VB.NET编写的WPF控件。如果事件处理程序导致问题,您可以使用AddHandler代替WithEventsHandles来条件化处理程序代码。使用AddHandler后,您可以使用@ gmagana的答案中描述的方法将处理程序包装在If中。

有关Handles和AddHandler之间区别的信息,请参阅此答案: