Laden...

Geerbte Eigenschaften verbergen

Erstellt von byte_schubser vor 15 Jahren Letzter Beitrag vor 15 Jahren 7.287 Views
B
byte_schubser Themenstarter:in
77 Beiträge seit 2008
vor 15 Jahren
Geerbte Eigenschaften verbergen

Hallo zusammen,

da ich lange nach einer Möglichkeit gesucht habe geerbte Eigenschaften in einer eigenen Komponente im Eigenschaftseditor zu verbergen möchte ich diese Möglichkeit hier mal reinstellen. Die unten aufgeführten Eigenschaften sind natürlich nur exemplarisch.

    protected override void PostFilterProperties(IDictionary Properties)
    {
      Properties.Remove("BackgroundImage");
      Properties.Remove("ContextMenu");
      Properties.Remove("FlatStyle");
      Properties.Remove("Image");
      Properties.Remove("ImageAlign");
      Properties.Remove("ImageIndex");
      Properties.Remove("ImageList");
      Properties.Remove("TextAlign");
      Properties.Remove("Enabled");
    }

Grüße

Udo

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo byte_schubser,

ich würde hier einen anderen Ansatz wählen, wenn es "nur" darum geht, dass das Eigenschaftsfenster nicht mehr alles anzeigt:

(Beispiel anhand eines eigenen Buttons und der Eigenschaft "Enabled")


public class MyCustomControl : System.Windows.Forms.Button
{
   // ... sonstige Programmierung für den Button

   [EditorBrowsable(EditorBrowsableState.Never)]
   public override bool Enabled
   {
      get { return base.Enabled; }
      set { base.Enabled = value; }
   }

   // sonstige Programmierung für den Button ...

}

Weil Attribute lassen sich nämlich überschreiben, und dann werden die Eigenschaften nicht einfach entfernt. Außerdem hätten dann Klassen, die wiederum von dieser ableiten die Chance, das nochmal zu entscheiden, was mit Deinem Ansatz schwieriger zu wissen oder zu realisieren wäre.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

0
767 Beiträge seit 2005
vor 15 Jahren

hallo norman_timo,

das problem ist aber, dass viele properties nicht virtual sind und sich daher nicht überschreiben lassen.

ausserdem kann eine weitere ableitende klasse doch einfach nach dem call auf base...() das property wieder dazufügen.

zumindest ist der erstgenannte weg wohl auch der, den microsoft vorschlagen würde (sonst hätten sie kaum diese möglichkeit geschaffen).

loop:
btst #6,$bfe001
bne.s loop
rts

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo 0815Coder,

wenn es nur darum geht, eine Eigenschaft in einer Unterklasse mit dem EditorBrowsableAttribute zu markieren, muss sie nicht virtuell sein.

herbivore

0
767 Beiträge seit 2005
vor 15 Jahren

Ich glaub ich steh grad auf dem Schlauch ?(

Wenn die Eigenschaft nicht virtual ist, kann man doch in der abgeleiteten Klasse kein Attribut draufsetzen...!?

loop:
btst #6,$bfe001
bne.s loop
rts

5.742 Beiträge seit 2007
vor 15 Jahren

Wenn die Eigenschaft nicht virtual ist, kann man doch in der abgeleiteten Klasse kein Attribut draufsetzen...!?

Doch - man kann new verwenden.
In diesem Fall ist new IMHO "verkraftbar", da es ja sowieso nur um "Kosmetisches" geht.
Zugreifen kann man ja immer noch ohne Einschränkungen und/oder Änderungen.

0
767 Beiträge seit 2005
vor 15 Jahren

Dachte ich in diesem thread auch, aber wenn es mit einem ControlDesigner geht, warum sollte man dann new verwenden?

Der ControlDesigner ist (unter anderem) genau dafür da.

Mit new setzt du abgesehen davon das Attribute nicht auf das nicht virtuelle Property sondern nur auf ein anderes, das den gleichen Namen hat.

loop:
btst #6,$bfe001
bne.s loop
rts

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo 0815Coder,

Der ControlDesigner ist (unter anderem) genau dafür da.

das EditorBrowsableAttribute ist auch genau dafür da.

Mit new setzt du abgesehen davon das Attribute nicht auf das nicht virtuelle Property sondern nur auf ein anderes, das den gleichen Namen hat.

Richtig, aber auch egal, wenn es - wie gesagt - nur um das EditorBrowsableAttribute geht.

aber wenn es mit einem ControlDesigner geht, warum sollte man dann new verwenden?

Im Grunde sollte man das Ausblenden von Properties möglichst ganz vermeiden. Es steht im Widerspruch zur Vererbung in der Objektorientierung, die konzeptuell immer eine Erweiterung und nie eine Einschränkung ist.

herbivore

1.665 Beiträge seit 2006
vor 15 Jahren

Im Grunde sollte man das Ausblenden von Properties möglichst ganz vermeiden. Es steht im Widerspruch zur Vererbung in der Objektorientierung, die konzeptuell immer eine Erweiterung und nie eine Einschränkung ist.

Bei manchen Controls macht das z.B. das Text-Property keinen Sinn. Die Sinnlosigkeit eines Properties ist für mich immer ein Grund, es auszublenden, da es nur für Verwirrung sorgt.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo JunkyXL,

meine Erfahrung ist eine andere. Hier im Forum gibt es immer wieder Fragen und Verwirrung, weil etwas ausgeblendet ist.

herbivore