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

时间:2010-12-21 10:51:42

标签: c# .net visual-studio-2008

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

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

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

我还创建了一个测试应用程序并在另一个控件中创建了一个简单的控件来测试VS是否存在问题,但它似乎对任何控件深度都能正常工作。

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

是否有人遇到此问题或有任何方法可以解决此问题。

3 个答案:

答案 0 :(得分:20)

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

将初始化方法移至Load事件,以避免此问题。

另外,您可以添加其他比较:

 protected bool IsInDesignMode
 {
    get
    {
        return DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime;
    }
 }

这肯定会提供一种确定设计模式的准确方法,因为有时VisualStudio 当您在表单上放置用户控件或在设计中刷新表单显示时,返回DesignMode = false。

答案 1 :(得分:0)

我有同样的问题。 也许这会对你有帮助。

    protected override void Dispose(bool disposing)
    {
        if (Application.ExecutablePath.IndexOf("devenv.exe", StringComparison.OrdinalIgnoreCase) < 0)
        {
            try
            {
                if (m_NormalImage != null) m_NormalImage.Dispose();
                if (m_DownImage != null) m_DownImage.Dispose();
                if (m_HoverImage != null) m_HoverImage.Dispose();

                m_NormalImage = null;
                m_DownImage = null;
                m_HoverImage = null;
            }
            catch
            {
            }
        }

        base.Dispose(disposing);
    }

答案 2 :(得分:0)

我在Program.cs中定义静态bool NotInDesignMode并在Main()中将其设置为true

这样我就不会对LicenseManager.UsageMode

采取任何依赖

但是,如果您正在编写泛型类库,则不会这样做。