Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net &引用;“设计模式”;预处理器指令_.net_Wpf_Visual Studio_Visual Studio 2010_Preprocessor - Fatal编程技术网

.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 这个。。。工作正常,现在在设计器中显示时没有问题 现在的问题是,我恐怕无法正确调试该组件

我有一个关于在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 

是否存在类似的情况?

您无法通过预处理器实现这一点。这是因为您可以在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:)编写的。不管怎样,我想到了这个似乎是唯一可行的解决方案。谢谢