0

我有一个不会在设计器中打开的表单。我使用了我在回答这个问题时提到的技术......

Visual Studio WinForms 设计器不实例化对象

...确定为什么表单不会在设计器中打开。

底线是表单的加载事件尝试加载一些从数据库获取数据的自定义业务对象。失败的线路是......

Dim connStr As String = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString

...这将返回一个空引用异常。它在不在设计模式下在设计器中打开表单的调用上下文中找不到我命名的连接字符串。

为什么是这样?连接字符串在表单所在项目的 app.config 中。我能想到的只是设计器在它自己的上下文中打开,并且不使用 winforms 项目的 app.config。事实上,在中断上下文中......配置管理器持有两个连接字符串......这两个都不在我的项目 app.config 中。它们如下...

?configurationmanager.ConnectionStrings(0).ConnectionString "数据源=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户实例=true"

?configurationmanager.ConnectionStrings(1).ConnectionString "data source="|DataDirectory|\aspnetdb.vdb3""

...我提到那些可能的线索。这些连接字符串都不是我的。但是他们每个都引用了我想在我的项目中支持的两个数据库提供程序......sql和vistadb。

所有这一切……有没有一种方法可以确定设计人员正在使用的运行上下文,以便我可以将数据添加到 app.config 中,这样它就不会因这个错误而中断。或者(更好)有没有办法强制设计者使用我的自定义 app.config。设计师使用的 app.config 位于何处?

提前感谢您的帮助。

赛斯

4

1 回答 1

1

将破坏设计器的代码包装在 Load 事件中,如下所示:

if ( this.Site == null || !this.Site.DesignMode )
{
... // code that breaks the designer
}
于 2009-06-12T21:23:34.143 回答