none
(Name)-Eigenschaft selbst integrieren RRS feed

  • Frage

  • Hallo zusammen,

    ich will ein Control bauen, welches über den Visuellen Designer des Visual Studios (Um genau zu dein über das System.ComponentModel.Design.CollectionEditor's) eingefügt wird. Soweit funktioniert das auch Perfekt.

    Ich bräuchte dafür aber einen Eindeutigen Namen, der auch als Name für die Instanz verwendet werden soll. Eben genau so wie die (Name)-Eigenschaft.

    Gibt es eine Möglichkeit, sich das selbst zu bauen? Wenn ja wie? Ich würde nur sehr ungerne von "Control" ableiten, da ich sonst sehr viele für mich unnütze Eigenschaften habe.

    Ich würde mich freuen, wenn jemand eine Antwort für mich hätte.

    Viele Grüße

    Andreas


    • Bearbeitet IchHalt91 Donnerstag, 8. Dezember 2011 09:50
    Donnerstag, 8. Dezember 2011 09:08

Antworten

  • Hallo,

    mit Control hat das überhaupt nichts zu tun, mehr mit Component.

    Der Anzeigename links im CollectionEditor wird über GetDisplayText ermittelt.
    Die Standardimplementation schaut ob der Typ eine Name Eigenschaft hat, wenn ja, wird der verwendet.
    Ansonsten ob die verwaltete Auflistung ein DefaultPropertyAttribute hat, wenn ja, wird die verwendet.
    (Beide nur dann wenn sie einen String) liefern)
    Ist beides nicht gegeben, wird ToString() verwendet.

    Das Erzeugen eines Namens übernimmt der DesignerHost über CreateComponent.
    und wird vom CollectionEditor implizit durch CreateInstance aufgerufen.
    Die konkrete Instanz ist dann der Windows Forms Designer in Visual Studio.

    Will man eigene Namen kreieren, so muss man sich ein Schema überlegen,
    was aber in den häufig sinnfrei ist.  Denn im Programm verweist man eher auf eine Objektinstanz.

    Wenn Du es doch tun willst müsstest Du von ComponentDesigner ableiten.
    Mehr dazu findest Du unter Erweitern der Entwurfszeitunterstützung

    Gruß Elmar

    • Als Antwort markiert IchHalt91 Freitag, 9. Dezember 2011 10:44
    Donnerstag, 8. Dezember 2011 12:55
    Beantworter

Alle Antworten

  • Hallo,

    mit Control hat das überhaupt nichts zu tun, mehr mit Component.

    Der Anzeigename links im CollectionEditor wird über GetDisplayText ermittelt.
    Die Standardimplementation schaut ob der Typ eine Name Eigenschaft hat, wenn ja, wird der verwendet.
    Ansonsten ob die verwaltete Auflistung ein DefaultPropertyAttribute hat, wenn ja, wird die verwendet.
    (Beide nur dann wenn sie einen String) liefern)
    Ist beides nicht gegeben, wird ToString() verwendet.

    Das Erzeugen eines Namens übernimmt der DesignerHost über CreateComponent.
    und wird vom CollectionEditor implizit durch CreateInstance aufgerufen.
    Die konkrete Instanz ist dann der Windows Forms Designer in Visual Studio.

    Will man eigene Namen kreieren, so muss man sich ein Schema überlegen,
    was aber in den häufig sinnfrei ist.  Denn im Programm verweist man eher auf eine Objektinstanz.

    Wenn Du es doch tun willst müsstest Du von ComponentDesigner ableiten.
    Mehr dazu findest Du unter Erweitern der Entwurfszeitunterstützung

    Gruß Elmar

    • Als Antwort markiert IchHalt91 Freitag, 9. Dezember 2011 10:44
    Donnerstag, 8. Dezember 2011 12:55
    Beantworter
  • Danke für deine Antwort.

     

    Ich bin mir nicht sicher ob du meine Frage falsch verstehst, oder ich deinen Antwort.

    Mir geht es darum dem Designer zu sagen, er soll die Eigenschaft "Name" auch als Name für die Objekt Instanz verwenden.

     

    Viele Grüße

    Andreas

    Donnerstag, 8. Dezember 2011 14:04
  • Hallo Andreas,

    das tut er für die Anzeige, wenn Du richtig gelesen hast...

    Eine Objekt-Instanz hat keinen Namen, nur im Quelltext steht mal einer drin,
    der wird bei der Serialisierung erzeugt:

    (Name) bei einem Windows Forms Control ist nicht identisch mit der Name Eigenschaft eines Controls.
    Vielmehr wird der Komponentenname (Component.Site.Name) dort reingeschrieben.

    Siehe dazu auch: Building Windows Forms Controls and Components with Rich Design-Time Feature

    Lies bitte die Artikel zur Erweitung der Entwurfszeitunterstützung.
    Ich weiß, das sind einige Seiten, aber ohne das Grundverständnis
    werden wir uns nicht wirklich verstehen (und Dein Compiler Dich auch nicht ;-)

    Gruß Elmar

    Donnerstag, 8. Dezember 2011 14:49
    Beantworter
  • Danke für dein Hilfe.

    Ich les mir das ganze am Wochenende mal durch.

    Freitag, 9. Dezember 2011 10:43