在设计器中为 winforms 应用程序打开的表单的运行上下文是啥

Posted

技术标签:

【中文标题】在设计器中为 winforms 应用程序打开的表单的运行上下文是啥【英文标题】:What is the run-context for a form opened in the designer for a winforms application在设计器中为 winforms 应用程序打开的表单的运行上下文是什么 【发布时间】:2010-11-02 14:10:07 【问题描述】:

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

Visual Studio WinForms designer does not instantiate object

...确定表单无法在设计器中打开的原因。

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

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 "数据源="|DataDirectory|\aspnetdb.vdb3""

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

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

提前感谢您的帮助。

赛斯

【问题讨论】:

【参考方案1】:

将破坏设计器的代码封装在 Load 事件中如下:

if ( this.Site == null || !this.Site.DesignMode )

... // code that breaks the designer

【讨论】:

谢谢...做到了...除了我在 VB 中做到的。赛斯

以上是关于在设计器中为 winforms 应用程序打开的表单的运行上下文是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何在winforms设计器中公开用户控件的整个子控件

默认情况下如何在双击表单时打开代码?

表单设计器中的组件数组

如何在设计器的 WinForms TabControl 中切换选项卡?

Winforms - 如何在设计器中显示/隐藏元素?

如何修改C#winform程序图标