Dialoge sinnvoll kapseln in C#
Teil 1
.NET bietet die Möglichkeit, Dialoge so zu
kapseln, dass die gesamte Funktionalität in der Dialogklasse
implementiert werden kann. Der Nutzer des Dialogs benötigt dann nur
noch einen einzigen Funktionsaufruf, um den Dialog anzuzeigen und
die Entscheidung des Anwenders bzw. die geänderten Daten zurück zu
erhalten.
Im Beispiel wird im Hauptfenster eine Listbox
angezeigt, die verschiedene Fahrzeuge auflistet. Über die Taste
Ändern wird der Dialog aufgerufen und anschließend die
Änderungen, sofern der Anwender OK gedrückt hat,
übernommen.

Ziel ist es, die Interaktion mit dem Dialog auf
einen einzigen Methodenaufruf zu beschränken:
Um dies zu erreichen, muss die Dialogklasse
eine öffentliche statische Methode Anzeigen
bereitstellen. Ferner muss ein privater Konstruktor angelegt werden,
damit keine Möglichkeit besteht, mit new
eine Instanz der Dialogklasse anzulegen. Somit entspricht die Klasse
dem Design-Pattern „Class-Factory“. Und so sieht die Implementierung
aus:
EingabeHersteller
etc. sind die Textboxen des Dialogs. Die Tasten OK und
Abbrechen benötigen keinerlei Programmierung. Ihre Funktionalität kann
über Eigenschaften eingestellt werden:

| Typ |
Bezeichnung |
Eigenschaft |
Wert |
| TextBox |
EingabeHersteller |
|
|
| TextBox |
EingabeTyp |
|
|
| TextBox |
EingabeKennzeichen |
|
|
| Button |
TasteOK |
DialogResult |
OK |
| Button |
TasteAbbrechen |
DialogResult |
Cancel |
| Form |
DialogFahrzeug |
AcceptButton |
TasteOK |
| |
|
CancelButton |
TasteAbbrechen |
Für die Tasten muss die Eigenschaft
DialogResult gesetzt werden, für die Form die
Eigenschaften AcceptButton und CancelButton.
Der Aufbau der Datenklasse ist wie folgt:

Im Hauptfenster werden im Konstruktor
einige Objekte dieser Klasse angelegt und ihre Referenzen
der Listbox hinzugefügt. Diese ruft für jedes hinzugefügte
Objekt ToString() auf, um den anzuzeigenden
Text zu ermitteln. Die Items-Collection
verwaltet daher nicht die Strings, sondern die Referenzen
unserer Fahrzeug-Objekte.

Leider werden die Texte der Listbox
nicht automatisch aufgefrischt, wenn sich die zugrunde
liegenden Daten geändert haben. Man muss daher mit einem
kleinen Trick nachhelfen und der Listbox an der ausgewählten
Position die Referenz zuweisen:

Das war’s auch schon. Der Dialog lässt
sich in beliebigen Situationen aufrufen, ohne dass
irgendwelche Vorkehrungen getroffen werden müssen. Dadurch,
dass alles, was den Dialog betrifft, also die
Initialisierung der Steuerelemente, das Lesen der Eingaben
usw., in der Dialogklasse abgehandelt wird, muss der
Aufrufer des Dialogs keine Kenntnisse der Internas haben.
Bei der Programmierung des Dialogs wiederum kann man sicher
sein, dass Zugriffe von außen auf die einzige öffentliche
statische Methode Anzeigen beschränkt sind.
Das Beispiel steht in „gezippter“ Form
zur Verfügung:
download
Im
nächsten Schritt wird gezeigt, wie man den Dialog um
eine Übernehmen-Taste erweitern kann.
|