2009-06-12 4 views
0

J'ai un formulaire qui ne s'ouvre pas dans le concepteur. J'ai utilisé la technique que je mentionne dans une réponse à cette question ...Quel est le contexte d'exécution d'un formulaire ouvert dans le concepteur pour une application winforms?

Visual Studio WinForms designer does not instantiate object

... pour déterminer pourquoi la forme ne sera pas ouvert dans le concepteur.

En bout de ligne, l'événement de chargement du formulaire tente de charger certains objets métier personnalisés qui récupèrent des données à partir d'une base de données. La ligne qui a échoué est ...

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

... cela renvoie une exception de référence null. Il ne peut pas trouver ma chaîne de connexion nommée dans le contexte appelant d'ouverture du formulaire dans le concepteur alors qu'il n'est pas en mode Création.

Pourquoi est-ce? La chaîne de connexion se trouve dans le fichier app.config du projet dans lequel se trouve le formulaire. Tout ce que je peux penser, c'est que le Designer s'ouvre dans son propre contexte et n'utilise pas le fichier app.config du projet winforms. En fait, dans le contexte break ... le gestionnaire de configuration tient deux connectionstrings ... dont aucune n'est dans mes projets app.config. Ils sont les suivants ...

configurationmanager.ConnectionStrings (0) .ConnectionString ? "Source de données = \ SQLEXPRESS; Integrated Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf;. Instance utilisateur = true"

?

et

configurationmanager.ConnectionStrings (1) .ConnectionString "source de données =" | DataDirectory | \ aspnetdb.vdb3 de ""

... Je mentionne ceux que les indices possibles. Aucune de ces connectstring ne m'appartient. Mais ils font chacun référence deux fournisseurs db que je veux soutenir dans mon projet ... sql et vistadb. Tout cela pour dire ... existe-t-il un moyen de déterminer le contexte d'exécution utilisé par le concepteur afin que je puisse ajouter des données à un app.config afin qu'il ne casse pas sur cette erreur. Ou (mieux) existe-t-il un moyen de forcer le concepteur à utiliser mon app.config personnalisé. Où est situé le fichier app.config utilisé par le concepteur?

Merci pour votre aide à l'avance.

Seth

Répondre

1

Enroulez le code qui casse le concepteur en cas de charge dans les domaines suivants:

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

Merci ... qui l'a fait ... sauf que je l'ai fait en VB. Seth –