子控件中的`DesignMode`设置不正确?

par*_*cle 12 .net c# visual-studio-2008

我有一个复合控件包含嵌套控件.我面临的问题是控制从全局设置类中读取属性,该属性是从设置文件读取的静态和实习.为了阻止个人控制在设计模式下访问配置,我添加了每个控件的检查.

If(!DesignMode){
    ...
    //Initialize properties e.g. prop = AppConfig.GetProperty("prop1");
}
Run Code Online (Sandbox Code Playgroud)

问题是个人控制在VS中打开时工作正常.但是当我打开包含嵌套控件的顶级控件时,我会得到VS设计师的错误.错误是DesignMode=false由于某种原因在嵌套控件中.

我还创建了一个测试应用程序,并在另一个控件中创建了一个简单的控件来测试VS是否存在问题,但它似乎可以正确地用于任何控件深度.

我甚至不知道如何调试这个.现在我注释掉属性初始化代码并构建它然后打开设计器然后取消注释并再次构建它来运行它.

有没有人遇到过这个问题,或者有什么方法可以解决它.

vel*_*koz 20

您遇到的问题是在构造函数(任何级别)中未设置 DesignMode .

将初始化方法移动到Load事件,以避免此问题.

此外,您可以添加额外的比较:

 protected bool IsInDesignMode
 {
    get
    {
        return DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime;
    }
 }
Run Code Online (Sandbox Code Playgroud)

这肯定会提供一种确定设计模式的精确方法,因为有时VisualStudio会在窗体上放置用户控件时返回DesignMode = false,或者在设计中刷新窗体显示本身.

  • 当控件嵌套时,这不起作用. (4认同)
  • 构造函数中的代码是问题所在.我已将它们移动到OnLoad()并添加了您在基本控件类中提供的属性作为双重检查.它现在正在努力. (2认同)