在设计师中查看表单时出错 - 我怎样才能避免这种情况?

时间:2009-02-05 22:43:46

标签: c# .net winforms windows-forms-designer

当我在设计器中加载它们时,我的一些表单会显示错误。这是因为在它们的构造函数中,它们使用从配置文件加载的系统设置。当表单在设计器中加载时,它使用一些随机路径,并且不出所料,配置文件不存在。

例如。 找不到配置文件C:\ Documents and Settings \ Rory \ Local Settings \ Application Data \ Microsoft \ VisualStudio \ 8.0 \ ProjectAssemblies \ it3dtcgg01 \ PrioryShared.dll.config。

我有什么方法可以解决这个问题,以便表格在设计师中正确显示吗? 例如:

if (!inDesignerMode) 
{ 
    loadSettingsFromConfigFile();
}

更新: 好的,我仍然收到这个错误。组成就像这样

  • MyForm.cs

    • MyCustomControl.cs

在MyCustomControl的构造函数中,我放了

if (!this.DesignMode)
{
    // Get settings from config file   <- this is where the error occurs
}

但是在那条线上我仍然在设计师中得到错误。是什么给了什么?

更新:值得注意的是this link,它描述了如何调试设计时控件。

更新:在对象的构造函数(MSDN)内调用时,Control.DesignMode未设置为true!所以那种代码应该放在onLoad中。或者,您可以使用this

之类的方法

6 个答案:

答案 0 :(得分:4)

如何简单地将该逻辑放入OnLoad,并检查DesignMode

protected override void OnLoad(System.EventArgs e)
{
    base.OnLoad(e);
    if (!this.DesignMode)
    {
        /* do stuff */
    }        
}

答案 1 :(得分:2)

您应该将项目包装在this.DesignMode的支票中,在设计师中设置为true,或将其移至OnLoad或其他未获得的地方在设计师使用过程中调用。

答案 2 :(得分:1)

或者,您可以这样做:

public bool IsDesignMode
{
   get
      {
         return (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv");
      }
}

答案 3 :(得分:0)

Page.DesignMode

这可以在所有页面和用户控件中使用。

答案 4 :(得分:0)

如果设计师当前使用该控件,我必须做一些特殊处理,这就是我的工作。


public MyControl() {
  InitializeComponent();
  if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)  {
    // Put stuff here that should not be run while in the designer
  }
}

答案 5 :(得分:0)

我总是发现控件使用配置文件是个错误。相反,控件应该具有可设置的属性,如果使用它的表单想要从配置中设置这些属性,那么欢迎这样做。