Laden...

Anzeige im PropertyGrid dynamisch beeinflussen

Erstellt von punkdevil vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.330 Views
P
punkdevil Themenstarter:in
992 Beiträge seit 2007
vor 16 Jahren
Anzeige im PropertyGrid dynamisch beeinflussen

Hallo,

bei der Verwendung des PropertyGrid-Controls habe ich noch drei Probleme, die ich noch nicht hinbekommen habe:

  1. Wie kann ich zur Laufzeit bestimmen, welche Eigenschaften im PropertyGrid angezeigt werden sollen und welche nicht?

  2. Wie kann ich den Anzeigename einer Eigenschaft ändern? (Standardmäßig wird ja immer der Name der Property verwendet, ich möchte aber auch Leerzeichen verwenden)

  3. Kann man zur Laufzeit bestimmen, welche Eigenschaft ReadOnly sein soll?

Vielen Dank im, voraus für eure Antworten.

J
10 Beiträge seit 2008
vor 16 Jahren

Hi

Also zu allen diesen Fragen gibt es Code auf CodeProject,
gib da einfach mal PropertyGrid ein.. und / oder nutz die Forensuche !
Um dem Namen einer Eigentschaft zu ändern musst Du zum Beipsiel
das PropertyDescriptor implementieren ...

Naja wie gesagt code Project hilft da

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo

ich denke, die Lösung zu allen drei Fragen liegt in folgendem:

PropertyGrid.PropertyTabs

  1. PropertyTab.GetProperties
  2. PropertyDescriptor.Description
  3. PropertyDescriptor.IsReadOnly

herbivore

P
punkdevil Themenstarter:in
992 Beiträge seit 2007
vor 16 Jahren

@jazzoid: Ich habe auf CodeProject gesucht und für das Problem 2. und 3. Problem etwas gefunden.

@herbivore: Die Klasse PropertyTabs stellt doch meines Wissens nach nur verschiedene Ansichten auf die Eigenschaften einer Klasse bereit. Ich weiß jetzt noch nicht genau, in wie weit mir das weiter hilft.

Ich werde mir jetzt erstmal das Projekt auf CodeProject anschauen.
Wahrscheinlich werden dabei meine Fragen schon beantwortet.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo punkdevil,

Die Klasse PropertyTabs stellt doch meines Wissens nach nur verschiedene Ansichten auf die Eigenschaften einer Klasse bereit.

eben und du willst ja eine bestimmte Ansicht. Keiner zwingt dich mehr als den einen Tab zu definieren, den du brauchst.

herbivore

P
punkdevil Themenstarter:in
992 Beiträge seit 2007
vor 16 Jahren

So, ich habe jetzt das PropertyGrid, so wie ich es wollte.

Ich habe aber noch eine Frage: Wie bekomme ich die Anzahl der angezeigten Properties raus? Ich brauche diese, damit ich die Größe des PropertyGrids so festlegen kann, damit genau alle sichtbar sind.

P
punkdevil Themenstarter:in
992 Beiträge seit 2007
vor 16 Jahren

Habs gerade selbst rausbekommen.

Die Anzahl der Properties auf dem ersten PropertyTab bekommt man mit:


propertyGrid.PropertyTabs[0].GetProperties(propertyGrid.SelectedObject).Count

O
778 Beiträge seit 2007
vor 16 Jahren

naja, der Weg ueber PropertyTabs wuerde ja bedeuten, dass du entscheidest, welche Eigenschaften angezeigt werden sollen. In vielen Fällen ist es aber besser das Objekt selbst (bzw Hilfsklassen) entscheiden zu lassen, welche Eigenschaften angezeigt werden sollen, weil dann nicht noch ewig gucken musst, was das fuer ein Objekt ist, da das Objekt oder damit verbundene Hilfsklassen das Objekt kennen. Was einen Performancegewinn bringen sollte und die Komplexitaet der Anwendung reduziert. Das waere dann der Weg ueber TypeConverter (statisch), bzw. ICustomTypeDescriptor (dynamisch, könnte daher einer der wenigen Fälle sein, in denen das mal gut ist, aber ich weiss nicht, ob das PropertyGrid das unterstützt).

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo onlinegurke,

naja, der Weg ueber PropertyTabs wuerde ja bedeuten, dass du entscheidest, welche Eigenschaften angezeigt werden sollen.

nicht zwangsläufig, denn die Standard-Implementierung von PropertyTab.GetProperties entscheidet ja auch nicht selbst, sondern anhand der Attribute des Objekts. Aber hier war ja gerade die Frage "Wie kann ich zur Laufzeit bestimmen, welche Eigenschaften im PropertyGrid angezeigt werden sollen und welche nicht?". Und da sehe ich nicht, wie das anders gehen soll als mit PropertyTab. Aber auch hier kann ja die Steuerung voll über (eigene) Attribute gehen.

herbivore

O
778 Beiträge seit 2007
vor 16 Jahren

Die Standardimplementierung von PropertyTabs delegiert einfach an die TypeConverter. Was ich meinte ist, wenn du das da ueberschreibst, dann musst du erst das entsprechende Objekt untersuchen, was es fuer ein Objekt ist. Es sei denn du fügst einfach Eigenschaften hinzu (zb IExtenderProvider).

Besser, viel besser, ist es, wenn man auf Basis des Objektes das ganze machen kann. Und da gibt sehr wohl Möglichkeiten (die warum auch immer aber ziemlich in Vergessenheit geraten): ICustomTypeDescriptor (dynamisch, wird aber teils nicht unterstuetzt und verletzt m.E. die Polymorphie) und TypeConverter (statisch über Attribute und einfach mal genial). Wenn man da seinen eigenen TypeConverter schreibt und da GetProperties überschreibt kann man in Verbindung mit eigenen PropertyDescriptor-Klassen eine ganze Menge lustiger Dinge anstellen.