none
Abgeleitete Forms lassen nicht mehr im Designer öffnen RRS feed

  • 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

    Montag, 28. Juni 2010 08:10

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

    Montag, 28. Juni 2010 09:38
  • 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,
    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.

    Gruß Elmar
    Montag, 28. Juni 2010 15:07
    Beantworter
  • 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
    Mittwoch, 30. Juni 2010 20:05

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
    Montag, 28. Juni 2010 08:35
    Beantworter
  • 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

    Montag, 28. Juni 2010 09:38
  • 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,
    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.

    Gruß Elmar
    Montag, 28. Juni 2010 15:07
    Beantworter
  • 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
    Mittwoch, 30. Juni 2010 20:05