fuechse-online  
Ingenieurbüro für Softwareentwicklung
Dr. Joachim Fuchs
  Börnhausener Berg 16
51674 Wiehl
Tel.: 02262 / 701 310
Home Beispiele Kontakt Impressum
 
 

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.