2009-06-12 9 views
0

Ich habe ein Formular, das nicht im Designer geöffnet wird. Ich benutzen die Technik, die ich auf diese Fragen in einer Antwort erwähnen ...Was ist der Run-Kontext für ein Formular im Designer für eine Winforms-Anwendung geöffnet

Visual Studio WinForms designer does not instantiate object

... warum das Formular geöffnet wird nicht in dem Designer zu bestimmen.

Die untere Zeile ist, dass das Ladeereignis des Formulars versucht, einige benutzerdefinierte Geschäftsobjekte zu laden, die Daten aus einer Datenbank abrufen. Die Linie, die ist, ist Ausfallen ...

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

... Dies gibt eine Nullreferenz Ausnahme. Die angegebene Verbindungszeichenfolge kann nicht im aufrufenden Kontext gefunden werden, in dem das Formular im Designer geöffnet wird, während es sich nicht im Entwurfsmodus befindet.

Warum ist das? Die Verbindungszeichenfolge befindet sich in der app.config des Projekts, in dem sich das Formular befindet. Ich kann nur daran denken, dass der Designer in seinem eigenen Kontext geöffnet wird und nicht die Datei "app.config" des winforms-Projekts verwendet. In der Tat, im Pausenkontext ... hält der Konfigurationsmanager zwei Connectionstrings ... von denen keiner in meinen Projekten app.config ist. Sie sind wie folgt ...

configurationmanager.ConnectionStrings (0) .ConnectionString ? "Data source = \ SQLEXPRESS; Integrated Security = SSPI; AttachDBFilename = | Datadirectory | aspnetdb.mdf;. User Instance = true"

?

und

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

... ich erwähne diese als mögliche Hinweise. Keine dieser Verbindungsstrings gehören mir. Aber sie verweisen jeweils auf zwei db-Provider, die ich in meinem Projekt unterstützen möchte ... sql und vistadb.

All dies zu sagen ... gibt es eine Möglichkeit, den Laufkontext zu bestimmen, der vom Designer verwendet wird, so dass ich Daten zu einer app.config hinzufügen kann, damit es bei diesem Fehler nicht bricht. Oder (besser) gibt es eine Möglichkeit, den Designer zu zwingen, meine benutzerdefinierte app.config zu verwenden. Wo wird die app.config vom Designer verwendet?

Vielen Dank für Ihre Hilfe im Voraus.

Seth

Antwort

1

Wickeln Sie den Code, der die Designer in dem Load-Ereignis in der folgenden bricht:

if (this.Site == null || !this.Site.DesignMode) 
{ 
... // code that breaks the designer 
} 
+0

Dank ... dass es tat ... außer ich es in VB tat. Seth –

Verwandte Themen