Laden...

PropertyGrid - abgeleitete Klasse von Button - Eigenschaften ausblenden

Erstellt von daTom vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.732 Views
D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren
PropertyGrid - abgeleitete Klasse von Button - Eigenschaften ausblenden

Hallo,

ich habe eine Klasse, die sich von Button ableitet. Da ich aber nicht alle Eigenschaften der Klasse Button für das PropertyGrid brauche, suche ich nach einer Möglichkeit, gewisse Eigenschaften auszublenden (Browseable=false ???)

Kann mir vielleicht jemand nen Tip geben?

Danke schon mal und schöne Ostertage

O
778 Beiträge seit 2007
vor 15 Jahren

Hm, die sehr unelegante, aber einfache Lösung ist der new-Operator (Das ist mal eine einigermaßen sinnvolle Einsatzmöglichkeit). Problem daran ist nur, dass der gegen jede OOP-Prinzipien verstößt, aber wenn dich das nicht weiter stört ist das OK. Also mach einfach eine private Eigenschaft drüber, das blendet die Eigenschaft der Oberklasse aus.

Jetzt zu den eleganteren Varianten.
Wenn du Glück hast, dann ist die Eigenschaft virtuell und du kannst sie überschreiben und ihr ein BrowsableAttribut verpassen.
Wenn du kein Glück hast, dann ist es fast noch das beste in der Klasse ICustomTypeDescriptor zu implementieren. Ich persönlich finde diese Lösung aber semantisch unschön, weswegen ich dann schon doch fast die unelegante Variante von oben vorziehen würde, aber diese Lösung wäre zumindest vielleicht noch verträglich mit den OOP-Prinzipien.

D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Hi,

danke schonmal für die schnelle Antwort.
Ich kann dir mit dem new noch nicht so ganz folgen.

Kannst du mir da mal kurz ein Code-Snippet zu schreiben?
Wäre echt nett.

Danke nochmal

691 Beiträge seit 2007
vor 15 Jahren

Hi
Hier wird der new Modifier erklärt: MSDN: new Modifier (C# Reference)
Benutze dennoch mal die Forumssuche. Vor nen paar Tagen müsste hier noch ne Diskussion drüber gewesen sein.

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo daTom,

Kannst du mir da mal kurz ein Code-Snippet zu schreiben?
Wäre echt nett.

ja, das wäre nett, was man von deiner Frage leider nicht sagen kann. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 4.

Ansonsten ist new hier (wie fast immer) völlig unpassend. Wenn du in einem PropertyGrid nur bestimmte Properties anzeigen lassen willst, dann verwende TypeConverter.GetProperties.

herbivore

D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Moin herbivore,

eine fertige Lösung wollte ich damit auch gar nicht erreichen. Eher ein kleines Beispiel wie das mit dem new-Operator in dem Zusammenhang gemeint war.

Mir war gar nicht bewusst, dass man den new-Operator auch für solche Zwecke benutzen kann. Man lernt ja nie aus...

Probiert habe ich das schon. Das klappt auf jeden Fall.

Du schreibst TypeConverter.GetProperties ist auch eine Möglichkeit. Hierfür muss ich aber für meine Klasse doch auch die Schnittstelle ICustomTypeDescriptor implementieren, oder?

Gruß

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo daTom,

ein anderer Weg sollte das Setzen einer passenden PropertyGrid.BrowsableAttributes-Collection sein.

herbivore

3.511 Beiträge seit 2005
vor 15 Jahren

Den new Operator braucht man bei sowas nicht. Wenn nur nur Properties ausblenden will im Designer reicht ein eigener ControlDesigner in den man wiederrum die Methode PreFilterProperties überschreibt.

new sollte man nie verwenden. [Edit] Wobei es da wirklich Ausnahmen gibt, wenn man z.B. bei einer ListView eine eigene ItemsCollection haben will.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 15 Jahren

Ich habe es gerade mal mit der Implementierung von ICustomTypeDescriptor versucht.
Das funktioniert super.

Hier habe ich eine gute Beispielimplementierung gefunden.