当我在设计器中加载它们时,我的一些表单会显示错误。这是因为在它们的构造函数中,它们使用从配置文件加载的系统设置。当表单在设计器中加载时,它使用一些随机路径,并且不出所料,配置文件不存在。
例如。 找不到配置文件C:\ Documents and Settings \ Rory \ Local Settings \ Application Data \ Microsoft \ VisualStudio \ 8.0 \ ProjectAssemblies \ it3dtcgg01 \ PrioryShared.dll.config。
我有什么方法可以解决这个问题,以便表格在设计师中正确显示吗? 例如:
if (!inDesignerMode)
{
loadSettingsFromConfigFile();
}
更新: 好的,我仍然收到这个错误。组成就像这样
MyForm.cs
在MyCustomControl的构造函数中,我放了
if (!this.DesignMode)
{
// Get settings from config file <- this is where the error occurs
}
但是在那条线上我仍然在设计师中得到错误。是什么给了什么?
更新:值得注意的是this link,它描述了如何调试设计时控件。
更新:在对象的构造函数(MSDN)内调用时,Control.DesignMode未设置为true!所以那种代码应该放在onLoad中。或者,您可以使用this
之类的方法答案 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)
我总是发现控件使用配置文件是个错误。相反,控件应该具有可设置的属性,如果使用它的表单想要从配置中设置这些属性,那么欢迎这样做。