我有一个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
有类似的东西吗?
答案 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
代替WithEvents
和Handles
来条件化处理程序代码。使用AddHandler
后,您可以使用@ gmagana的答案中描述的方法将处理程序包装在If
中。
有关Handles和AddHandler之间区别的信息,请参阅此答案: