head.WriteLine()

Montag, Oktober 02, 2006

Entwurfszeit-Attribute, Teil 2: Interaktion mit dem PropertyGrid

Standardeigenschaft und Event einer Komponente bestimmen
Wenn Sie eine Komponente im Designer auswählen und dann in das Eigenschaftenfenster wechseln, wird die entsprechende Standardeigenschaft ausgewählt. Welche dies sein soll, können Sie auf über das DefaultProperty-Attribut festlegen, dass auf Klassenebene deklariert wird.

[DefaultProperty("MyProperty")]
public class MyComponent : Component
{
...
}

Das gleiche können Sie auch für Events bewirken. Hierfür deklarieren Sie das DefaultEvent-Attribut.

[DefaultEvent("MyEvent")]
public class MyComponent : Component
{
...
}


Eigenschaft mit Schreibschutz versehen
Möchten Sie hingegen, dass eine Eigenschaft zur Entwurfszeit sichtbar ist, vom Entwickler jedoch nicht geändert werden darf, so können Sie diese mit dem ReadOnly-Attribut ausstatten.

[ReadOnly(true)]
public string MyProperty
{
...
}

Dieser Schreibschutz bezieht sich jedoch nur auf das Eigenschaftenfenster, eine programmatische Änderung ist weiterhin möglich.

Den Eigenschaftennamen in Klammern setzen
Einige Eigenschaften, wie beispielsweise die Dynamic Properties der Form-Klasse, werden im Eigenschaftenfenster in Klammern darstestellt. Wenn Sie diese Darstellung für eine Ihrer Eigenschaften realisieren wollen, deklarieren Sie das ParenthesizePropertyName-Attribut und setzen es auf true.

[ParenthesizePropertyName(true)]
public string MyProperty
{
...
}

Beschreibungen und Kategorien
Um dem Entwickler die Eigenschaft im PropertyGrid näher zu erläutern, können Sie dieses mit dem Description-Attribut versehen und mit einem entsprechenden Beschreibungstext füllen. Dieser wird dann im unteren Bereich des PropertyGrids angezeigt.

Das Eigenschaftenfenster zeigt standardmässig die Eigenschaften in einer kategorisierten Ansicht an. Unter welcher Kategorie Ihre Eigenschaft angezeigt werden soll, können Sie über das Category-Attribute bestimmen. Beispiel:

[Category("Data")]
public string MyProperty
{
...
}

Die möglichen Werte sind hierbei:

  • Action
  • Appearance
  • Behavior
  • Data
  • Default
  • Design
  • DragDrop
  • Focus
  • Format
  • Key
  • Layout
  • Mouse
  • WindowStyle

Eigenschaften mergen
Ist Ihnen schon einmal aufgefallen, dass Sie bestimmte Eigenschaften für mehrere Komponenten gleichzeitig zuweisen können? Wenn Sie beispielsweise zwei Textboxen auswählen, können Sie im Eigenschaftenfenster für beide die Visible-Eigenschaft setzen. Bei anderen Eigenschaften, wie Text ist dies hingegen nicht möglich. Die Steuerung dieses Verhaltens findet hierbei über das MergableProperty-Attribut statt. Steht dieses auf true, so kann die entsprechende Eigenschaft auch für mehr als eine Komponenteninstanz zugewiesen werden.

[MergableProperty(true)]
public string MyProperty
{
...
}


Aktualisierungen
Bei Controls ist es oft sinnvoll, die Entwurfsoberfläche nach dem Ändern einer Eigenschaft zu aktualisieren. Dies können Sie entweder manuell in der Eigenschaft bewerkstelligen, oder automatisiert durch das Setzen des RefreshProperties-Attributs. Dieses wird vom Designer ausgewertet und ggf. eine Aktualisierung vorgenommen. In welcher Form dies geschehen soll, bestimmen Sie über einen Wert der RefreshProperties-Enumeration. Hierbei können Sie zwischen den folgenden Werten wählen:

  • All
  • Default
  • Repaint

Um beispielsweise ein Neuzeichnen nach der Änderung zu bewirken, könnten Sie das Attribut wie folgt deklarieren:

[RefreshProperties(RefreshProperties.Repaint)]
public string MyProperty
{
...
}