0

デザイナーで開かないフォームがあります。私はこの質問への回答で言及したテクニックを使用しました...

VisualStudioWinFormsデザイナーはオブジェクトをインスタンス化しません

...フォームがデザイナで開かない理由を判別するため。

つまり、フォームのloadイベントは、データベースからデータを取得するカスタムビジネスオブジェクトを読み込もうとします。失敗している行は...

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

...これはnull参照例外を返します。デザインモードでないときにデザイナでフォームを開く呼び出しコンテキストで、名前の付いた接続文字列が見つかりません。

どうしてこれなの?接続文字列は、フォームが含まれるプロジェクトのapp.configにあります。私が考えることができるのは、Designerが独自のコンテキストで開いており、winformsプロジェクトのapp.configを使用していないことだけです。実際、ブレークコンテキストでは、構成マネージャーは2つの接続文字列を保持しています...どちらも私のプロジェクトapp.configにはありません。それらは次のとおりです...

?configurationmanager.ConnectionStrings(0).ConnectionString "datasource=。\SQLEXPRESS;Integrated Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf; User Instance = true"

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

...私はそれらを可能な手がかりとして言及します。これらの接続文字列はどちらも私のものではありません。しかし、それらはそれぞれ、私のプロジェクトでサポートしたい2つのdbプロバイダー...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 に答える