我有一个不会在设计师中打开的表单。我在回答这个问题时使用了我提到的技术......
Visual Studio WinForms designer does not instantiate object
...确定表单无法在设计器中打开的原因。
底线是表单的load事件尝试加载一些从数据库获取数据的自定义业务对象。失败的是......
Dim connStr As String = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString
...这会返回一个空引用异常。在设计模式下打开表单的调用上下文中找不到我的命名连接字符串。
这是为什么? connectionstring位于表单所在项目的app.config中。我所能想到的是Designer在其自己的上下文中打开并且不使用winforms项目的app.config。实际上,在break上下文中...配置管理器IS持有两个连接字符串......这两个连接字符串都不在我的项目app.config中。它们如下......
?configurationmanager.ConnectionStrings(0).ConnectionString “data source =。\ SQLEXPRESS; Integrated Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf; User Instance = true”
和
?configurationmanager.ConnectionStrings(1).ConnectionString “data source =”| DataDirectory | \ aspnetdb.vdb3“”
......我提到这些可能的线索。这些连接线都不是我的。但他们每个都会引用我想在项目中支持的两个数据库提供程序... sql和vistadb。
所有这一切......是否有一种方法可以确定设计人员使用的运行上下文,以便我可以将数据添加到app.config,以便它不会因此错误而中断。或者(更好)是否有办法强制设计师使用我的自定义app.config。设计师使用的app.config在哪里?
提前感谢您的帮助。
赛斯
答案 0 :(得分:1)
在下面的Load事件中包装破坏设计器的代码:
if ( this.Site == null || !this.Site.DesignMode )
{
... // code that breaks the designer
}