【问题标题】:Windows Forms designer compilation symbol: does it exist?Windows 窗体设计器编译符号:它存在吗?
【发布时间】:2011-09-19 10:00:50
【问题描述】:

完整的 Windows 操作系统的 Windows 窗体是否有一些编译符号,所以当设计人员要编译代码时,我可以使用预处理器指令有条件地编译?

Compact Framework 项目有,但我在完整的 Windows 窗体项目中找不到这样的符号。

示例代码:

#if DESIGNTIME

#endif 

【问题讨论】:

  • 设计器不编译代码。所以不行。在您的代码中使用 this.DesignMode。
  • 但请检查 CF Windows Forms 是否具有 NETCFDESIGNTIME 编译符号。设计者不编译代码,但设计者需要最新的编译代码。
  • 只是在项目属性中设置的。项目+属性,构建选项卡,条件编译符号设置。 pcreview.co.uk/forums/netcfdesigntime-t1298386.html
  • @Hans Passant,感谢您提供的信息,但我真的知道这一点。这与添加自定义符号无关。 符号必须由编译器的调用者 - Visual Studio 设计器 - 以某种方式定义。
  • “设计师要编译代码”是什么意思? Designer 不会编译代码,它会生成代码。也许您在谈论容器的设计/运行时模式?但这仅适用于控件。问题不清楚。

标签: c# .net winforms .net-4.0


【解决方案1】:

当您打开项目的属性时,您可以在“Build#”选项卡的顶部设置任意条件编译符号。内置#DEBUG 和#TRACE,但您可以定义自己的。

【讨论】:

  • 感谢您的回答,但我相信您没有明白我回答的重点。实际上我知道我可以定义任意的自定义编译符号,但是您真的认为定义自定义符号会使它们可用于检测由 Visual Studio 设计器启动的编译吗? ;)
  • 啊,好的,我明白了。几年前我也遇到过这个问题。设计器会崩溃,因为我的一个自定义控件没有有意义的空构造函数(因此得到一个空引用)。我想我用 Hans 建议的自定义变量围绕它构建。
  • 是的,我也知道这个属性。但我想知道 Compact Framework 中是否有类似 Windows 窗体的东西,让我们看看它是否存在。
【解决方案2】:

我相信这个问题不会有完整的答案,因为 Windows 窗体中似乎不存在这样的编译符号。

归根结底,答案是 不,Windows 窗体中没有设计器编译符号

【讨论】:

    【解决方案3】:

    来自.Net source

    public static bool DesignTime( Control myControlOrForm )
    {
        return myControlOrForm.Site != null && myControlOrForm.Site.DesignMode;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2013-05-05
      • 2023-03-12
      • 2011-04-07
      相关资源
      最近更新 更多