.net &引用;“设计模式”;预处理器指令
我有一个关于在Designer中显示组件的问题 我发现了设计师不喜欢的“坏”代码 现在的问题是,我不能仅使用预处理器指令在设计时“注释”它 现在,我(为VB.NET)尝试了以下内容.net &引用;“设计模式”;预处理器指令,.net,wpf,visual-studio,visual-studio-2010,preprocessor,.net,Wpf,Visual Studio,Visual Studio 2010,Preprocessor,我有一个关于在Designer中显示组件的问题 我发现了设计师不喜欢的“坏”代码 现在的问题是,我不能仅使用预处理器指令在设计时“注释”它 现在,我(为VB.NET)尝试了以下内容 #If Not Debug Then Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent ... #End If 这个。。。工作正常,现在在设计器中显示时没有问题 现在的问题是,我恐怕无法正确调试该组件
#If Not Debug Then
Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent
...
#End If
这个。。。工作正常,现在在设计器中显示时没有问题
现在的问题是,我恐怕无法正确调试该组件
所以,我正在寻找一个解决办法
#If Not DESIGN_TIME Then
#End If
是否存在类似的情况?您无法通过预处理器实现这一点。这是因为您可以在VS之外运行调试可执行文件(尝试一下,在调试模式下双击VS生成的EXE) 无论如何,有一个运行时(不是基于预处理器的)属性可能会有所帮助:
if (System.ComponentModel.LicenseManager.UsageMode ==
System.ComponentModel.LicenseUsageMode.Designtime)
这些网页将有助于在运行时检查设计模式,并具有其他方法:
IDE不会重建代码以显示设计器。它使用您已经构建的二进制文件。所以预处理器指令不会有帮助
既然您提到了
myWpfComponent\u itsfevent
,我想这是一个WPF问题。在WPF中,您可以通过使用来检测设计模式。您的问题是使用WinForms designer中用VB.NET编写的WPF控件。如果事件处理程序导致问题,可以使用AddHandler
而不是WithEvents
和Handles
来条件化处理程序代码。使用AddHandler
后,可以使用@gmagana的答案中描述的方法将添加处理程序包装为If
有关句柄和AddHandler之间的差异,请参见以下答案:
if (!DesignerProperties.GetIsInDesignMode(this))
{
//Code to not execute in design mode
}
注意,“this”标识符可以是任何DependencyObject基于OP提到的“myWpfComponent_ItsEvent”,这看起来像是一个WPF问题。您提到的属性是针对WinForms的,而不是WPF。引用的页面有其他检查设计的方法。更多,请检查第二个链接我只能在方法中使用“if”。不在它之外:)@serhio:那么你有一个基本的设计问题。如果您想真正修复它,那么将您的设计更改为编译器可以看到的东西(我们不能告诉您如何在没有看到所有代码的情况下执行)。如果您想在其上贴上创可贴并使其暂时工作,请使用调试预处理器符号,然后仅在发布模式下分发,或者定义您自己的预处理器符号并以这种方式修复症状。此属性对我非常有用(出于另一个原因)+1@Daniel怀特:参见“问题”一词的链接。Winforms Designer“不喜欢”处理Wpf托管控件上的事件。我不明白为什么需要使用预处理器指令来执行此操作。这辆车怎么了?是的。但请再次查看我的代码。我需要“忽略”整个方法,或VB中的句柄,或C#中的事件附件。我不能在方法外使用经典的“如果”(忽略所有方法),为什么需要在方法外使用它?只需添加
if(DesignerProperties.IsInDesignMode(this))返回代码>作为方法中的第一件事。瞧:你的方法在设计模式下不再做任何事情。比如说,WPF控件是用C#编写的,但是宿主控件是用VB:)编写的。不管怎样,我想到了这个似乎是唯一可行的解决方案。谢谢