Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
PropertyGrid - abgeleitete Klasse von Button - Eigenschaften ausblenden
daTom
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

PropertyGrid - abgeleitete Klasse von Button - Eigenschaften ausblenden

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
onlinegurke
myCSharp.de - Member



Dabei seit:
Beiträge: 779
Herkunft: Dresdner in Karlsruhe

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
daTom
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Tomot
myCSharp.de - Member

Avatar #avatar-2678.jpg


Dabei seit:
Beiträge: 691
Herkunft: Düsseldorf

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo daTom,
Zitat
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
private Nachricht | Beiträge des Benutzers
daTom
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

beantworten | zitieren | melden

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ß
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo daTom,

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

herbivore
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Khalid am .
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
daTom
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

beantworten | zitieren | melden

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

Hier habe ich eine gute Beispielimplementierung gefunden.
private Nachricht | Beiträge des Benutzers