Benutzer mit den meisten Antworten
Abgeleitete Forms lassen nicht mehr im Designer öffnen

Frage
-
Hallo miteinander,
in meinem Projekt leite ich einige Forms von einem Basisform ab. Das klappte bisher auch gut. Nun lassen sich plötzlich nicht mehr die abgeleiteten Forms im Designer öffen, das Basisform lässt sich noch öffnen.
Es erscheint die Meldung:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Instanzen dieses Fehlers (1)
bei hr.VIDA.View.Controls.Browser.BaseBrowser..ctor() in D:\Projekte\hr\VIDA\hr.VIDA.View\Controls\Browser\BaseBrowser.cs:Zeile 29."
Das Projekt lässt sich nach wie vor fehlerfrei kompilieren und ausführen, nur das Öffnen der Forms im Designer funktioniert nicht mehr.
Vielleicht hat jemand eine Idee? Sieht für mich ein wenig nach einem Visual Studio-Bug aus.
Danke und Gruß,
Stefan
Antworten
-
Danke für die Antwort. Den Tipp, habe ich vor wenigen Augenblicken auch erhalten. Ich setze im Konstruktor des Basis-Forms einen Event-Handler. Den Code habe ich nun mit
if (!DesignMode && System.Reflection.Assembly.GetEntryAssembly() != null) { // CODE }
gekapselt. Oder gibt es eine bessere Lösung?
Gruß,
Stefan
- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. Juli 2010 07:04
-
Hallo Stefan,
das wäre die 08/15 Standard-Lösung, die in der Regel funktionieren sollte.
Ob es eine bessere Lösung gibt, hängt davon ab, welchen Event-Handler
Du dort einrichtest, und was der so anstellt.
Wenn er etwas tut, was auch zu Entwicklungszeit von Bedeutung ist,
könnte es etwas zuviel sein.Wenn es sich um ein Standard-Ereignis von Control oder Form-Klasse handelt,
Gruß Elmar
so ist es am allgemeinen sinnvoller, die in der Regel vorhandene
protected virtual void On<Ereignisname>(...)
Methode zu überschreiben.
Und dort zwischen Entwicklungszeit und Laufzeit zu unterscheiden, sofern erforderlich.- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. Juli 2010 07:04
-
Hallo Stefan,
ergänzend ... weil ich gerade zufällig drüber geschaut habe ...: DesignMode ist übrigens gerade im Konstruktor (aber auch in anderen Situationen) nicht wirksam. Prüfe das ggf..
GetEntryAssembly halte ich auch für eine gefährliche Implementation. In verschachtelten Aufruf- und Lade-Szenarien kann das einen ungewollten Wert ergeben.
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. Juli 2010 07:04
Alle Antworten
-
Hallo Stefan,
in meinem Projekt leite ich einige Forms von einem Basisform ab. Das klappte bisher auch gut. Nun lassen sich plötzlich nicht mehr die abgeleiteten Forms im Designer öffen, das Basisform lässt sich noch öffnen.
Es erscheint die Meldung:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Instanzen dieses Fehlers (1)
bei hr.VIDA.View.Controls.Browser.BaseBrowser..ctor() in D:\Projekte\hr\VIDA\hr.VIDA.View\Controls\Browser\BaseBrowser.cs:Zeile 29."
Das Projekt lässt sich nach wie vor fehlerfrei kompilieren und ausführen, nur das Öffnen der Forms im Designer funktioniert nicht mehr.
Das sieht mir eher nach einem Bug in Deinem Basisformular aus, den Du in Zeile 29 findest. Eventuell greifst Du auf ein Objekt zu, dass erst zur Laufzeit existiert. Das ist für den Designer dann eher schlecht. Bedenke dass Teile Deines Code im Basisformular beim Entwerfen abgeleiteter Formulare genauso ausgeführt werden, wie zur Laufzeit.
Um den Fehler einzugrenzen, kannst Du mal den Code im Konstruktor auskommentieren und Stück für Stück wieder reaktivieren, bis wieder der Fehler im abgeleiteten Formular erscheint (kompilieren zwischen den Schritten nicht vergessen). Wenn Du den Fehler nicht findest, poste einfach den Inhalt des Konstruktors hier.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Danke für die Antwort. Den Tipp, habe ich vor wenigen Augenblicken auch erhalten. Ich setze im Konstruktor des Basis-Forms einen Event-Handler. Den Code habe ich nun mit
if (!DesignMode && System.Reflection.Assembly.GetEntryAssembly() != null) { // CODE }
gekapselt. Oder gibt es eine bessere Lösung?
Gruß,
Stefan
- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. Juli 2010 07:04
-
Hallo Stefan,
das wäre die 08/15 Standard-Lösung, die in der Regel funktionieren sollte.
Ob es eine bessere Lösung gibt, hängt davon ab, welchen Event-Handler
Du dort einrichtest, und was der so anstellt.
Wenn er etwas tut, was auch zu Entwicklungszeit von Bedeutung ist,
könnte es etwas zuviel sein.Wenn es sich um ein Standard-Ereignis von Control oder Form-Klasse handelt,
Gruß Elmar
so ist es am allgemeinen sinnvoller, die in der Regel vorhandene
protected virtual void On<Ereignisname>(...)
Methode zu überschreiben.
Und dort zwischen Entwicklungszeit und Laufzeit zu unterscheiden, sofern erforderlich.- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. Juli 2010 07:04
-
Hallo Stefan,
ergänzend ... weil ich gerade zufällig drüber geschaut habe ...: DesignMode ist übrigens gerade im Konstruktor (aber auch in anderen Situationen) nicht wirksam. Prüfe das ggf..
GetEntryAssembly halte ich auch für eine gefährliche Implementation. In verschachtelten Aufruf- und Lade-Szenarien kann das einen ungewollten Wert ergeben.
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. Juli 2010 07:04