7 Weitere Elemente eines Windows-Programms
In diesem Kapitel wird die Programmierung mit bekannten Elementen von Windows-Programmen vorgestellt, die uns täglich begegnen.
Die folgenden Elemente sind selbstverständliche Bestandteile eines Windows-Programms: Hauptmenü, Kontextmenü, Symbolleiste, Statusleiste, Eingabe-Dialogfeld, Ausgabe-Dialogfeld sowie einige Standard-Dialogfelder.
Im Folgenden wird die Klasse Font, die zur Einstellung der Schrifteigenschaften von Steuerelementen dient, gemeinsam mit dem Thema Hauptmenü an Beispielen erläutert.
7.1 Hauptmenü

Hauptmenüs dienen der übersichtlichen Darstellung größerer Sammlungen von Befehlen. Ein Menü kann unter anderem folgende Einträge enthalten:
- einen Befehl, der direkt ausgeführt wird
- einen Aufruf eines Dialogfelds, in dem der Benutzer Eingaben machen kann
- ein Untermenü, das weiter verzweigt
7.1.1 Erstellung des Hauptmenüs

Zur Erstellung eines Hauptmenüs ziehen Sie das Steuerelement MenuStrip aus der Abteilung Menüs & Symbolleisten aus der Toolbox auf das Formular. Es erscheint anschließend an zwei Stellen (siehe auch Abbildung 7.1):
- im Formular selbst zur Eingabe der einzelnen Menüpunkte, diese stellen wiederum Steuerelemente mit einstellbaren Eigenschaften dar
- unterhalb des Formulars (ähnlich wie das Zeitgeber-Steuerelement) zur Einstellung der Eigenschaften des Hauptmenüs
Abbildung 7.1 Hauptmenü
Zunächst können Sie im Formular den ersten Punkt des Hauptmenüs eintragen. Anschließend können Sie entweder einen Untermenüpunkt zu diesem Hauptmenüpunkt eintragen (nach unten) oder einen weiteren Hauptmenüpunkt (nach rechts). Dieser Vorgang wird fortgesetzt, bis Sie zuletzt alle Haupt- und Untermenüpunkte (gegebenenfalls mit weiteren Untermenüs unter Untermenüs usw.) eingetragen haben, siehe Abbildung 7.2.
Abbildung 7.2 Hauptmenü, mit Untermenühierarchie
Möchten Sie die Reihenfolge der Menüpunkte ändern, so ist dies problemlos per Drag & Drop möglich. Im vorliegenden Programm wurden die vorgeschlagenen Namen für die Menüelemente etwas verkürzt, damit Sie sie besser im Code handhaben können. Ein Beispiel: Aus der Bezeichnung GelbToolStripMenuItem für den Menüpunkt zur Einstellung einer gelben Hintergrundfarbe wurde mnuGelb.
Ein Hauptmenüpunkt ist entweder
- ein normaler Menüeintrag,
- eine ComboBox (= Kombinationsfeld) zur Auswahl bzw. zum Eintrag, wie z. B. die Schriftgröße in der Symbolleiste in Microsoft Word, oder
- eine TextBox.
Bei einem Untermenüpunkt können Sie zusätzlich noch den Eintrag Separator wählen. Dieser dient zur optischen Trennung von Menüpunkten.
Jeder Menüpunkt stellt ein Steuerelement mit einstellbaren Eigenschaften dar. Menüpunkte können auch per Tastatur ausgewählt werden, wie dies z. B. bei Buttons bereits gemacht wurde. Vor dem Buchstaben, der unterstrichen werden soll, wird das Zeichen & eingegeben, siehe Abbildung 7.3. Das Ergebnis sehen Sie in Abbildung 7.4.
Abbildung 7.3 Unterstrichener Buchstabe
Abbildung 7.4 Bedienung per Tastatur
Außerdem können Sie Menüpunkte mit einem Häkchen kennzeichnen wie ein Kontrollkästchen. Damit können Sie einen aktuell gültigen Zustand (ein/aus) oder einen Einstellwert kennzeichnen.
7.1.2 Code des Hauptmenüs

Das wichtigste Ereignis eines normalen Menüpunkts ist der Click. Dieser wird mit einer Ereignisprozedur verbunden. Im nachfolgenden Projekt MenüHaupt kann eine Reihe von Abläufen über das Hauptmenü gesteuert werden.
Hauptmenü Bearbeiten:
- Untermenüpunkt Kopieren: Der Inhalt des Textfelds wird in das Label kopiert.
- Untermenüpunkt Ende: Das Programm wird beendet.
Hauptmenü Ansicht:
- Untermenüpunkte Hintergrund (bzw. Schriftart): Es erscheint eine weitere Menüebene. Darin kann die Hintergrundfarbe (bzw. Schriftart) des Labels aus drei Möglichkeiten ausgewählt werden. Die jeweils aktuelle Einstellung ist markiert.
- Untermenüpunkt Schriftgröße: Der Benutzer hat die Möglichkeit, aus einer ComboBox (Kombinationsfeld) die Schriftgröße auszuwählen bzw. einzugeben.
- Untermenüpunkte Fett bzw. Kursiv: Der Benutzer hat die Möglichkeit, den Schriftstil Fett und/oder Kursiv auszuwählen. Der gewählte Schriftstil ist anschließend markiert.
Im Folgenden geht es zunächst um die Ereignisprozeduren des Hauptmenüs Bearbeiten (Projekt MenüHaupt):
Public Class Form1
Private Sub mnuKopieren_Click(...) Handles ...
lblA.Text = txtE.Text
If lblA.Text = "" Then lblA.Text = "(leer)"
End Sub
Private Sub mnuEnde_Click(...) Handles ...
Me.Close()
End Sub
[...]
End Class
Listing 7.1 Projekt »MenüHaupt«, Hauptmenü »Bearbeiten«
Zur Erläuterung:
- Nach dem Kopieren eines leeren Textfelds in das Label wird der Text (leer) eingeblendet, damit man die anderen Einstellungen noch sehen kann.
Die Ereignisprozeduren zur Einstellung der Hintergrundfarbe im Hauptmenü Ansicht (siehe Abbildung 7.5) lauten wie folgt:
Public Class Form1
[...]
Private Sub mnuGelb_Click(...) Handles ...
lblA.BackColor = Color.Yellow
mnuGelb.Checked = True
mnuBlau.Checked = False
mnuRot.Checked = False
End Sub
Private Sub mnuBlau_Click(...) Handles ...
lblA.BackColor = Color.Blue
mnuGelb.Checked = False
mnuBlau.Checked = True
mnuRot.Checked = False
End Sub
Private Sub mnuRot_Click(...) Handles ...
lblA.BackColor = Color.Red
mnuGelb.Checked = False
mnuBlau.Checked = False
mnuRot.Checked = True
End Sub
[...]
End Class
Listing 7.2 Projekt »MenüHaupt«, Farbe einstellen
Zur Erläuterung:
- Die Hintergrundfarbe wird mithilfe der Struktur Color auf den gewünschten Wert eingestellt.
- Die Eigenschaft Checked des Untermenüpunkts der ausgewählten Farbe wird auf True gestellt, die jeweils anderen beiden Eigenschaften werden auf False gestellt.
- Achten Sie darauf, dass die Startwerte der jeweiligen Checked-Eigenschaften auch mit dem Startwert der Hintergrundfarbe übereinstimmen.
Abbildung 7.5 Menü »Ansicht«, Hintergrund
7.1.3 Klasse Font

Die restlichen Ereignisprozeduren bewirken Änderungen bei Schriftart, Schriftgröße und Schriftstil. Dazu muss zunächst die Klasse Font näher betrachtet werden.
Viele Steuerelemente haben die Eigenschaft Font. Darin werden die Eigenschaften der Schrift im oder auf dem Steuerelement festgelegt. Diese Eigenschaften werden zur Entwicklungszeit im Eigenschaftenfenster eingestellt. Sie können zur Laufzeit des Programms ermittelt bzw. geändert werden.
Zur Änderung wird ein neues Objekt der Klasse Font benötigt. Zur Erzeugung eines solchen Objekts stehen zahlreiche Konstruktoren zur Verfügung. Da in diesem Programm Schriftart, Schriftgröße und Schriftstil verändert werden können, wird der Konstruktor benutzt, der alle drei Eigenschaften verlangt.
Dies mag zunächst verwundern. Es ist aber nicht möglich, nur die Schriftart allein zu ändern, denn die betreffende Untereigenschaft ist nicht änderbar und es gibt auch keinen Konstruktor der Klasse Font, der nur die Schriftart verlangt. Ebenso verhält es sich mit Schriftgröße und Schriftstil.
7.1.4 Schriftart

Zunächst die Ereignisprozeduren zur Änderung der Schriftart, siehe Abbildung 7.6.
Abbildung 7.6 Menü »Ansicht«, Schriftart
Public Class Form1
[...]
Private Sub mnuCourierNew_Click(...) Handles ...
lblA.Font = New Font("Courier New",
lblA.Font.Size, lblA.Font.Style)
mnuCourierNew.Checked = True
mnuSymbol.Checked = False
mnuArial.Checked = False
End Sub
Private Sub mnuSymbol_Click(...) Handles ...
lblA.Font = New Font("Symbol",
lblA.Font.Size, lblA.Font.Style)
mnuCourierNew.Checked = False
mnuSymbol.Checked = True
mnuArial.Checked = False
End Sub
Private Sub mnuArial_Click(...) Handles ...
lblA.Font = New Font("Arial",
lblA.Font.Size, lblA.Font.Style)
mnuCourierNew.Checked = False
mnuSymbol.Checked = False
mnuArial.Checked = True
End Sub
[...]
End Class
Listing 7.3 Projekt »MenüHaupt«, Schriftart einstellen
Zur Erläuterung:
- In den Prozeduren wird ein neu erzeugtes Objekt der Klasse Font der Eigenschaft Font des Labels zugewiesen.
- Der verwendete Konstruktor erhält den Namen der neuen Schriftart und die aktuellen Einstellungen von Schriftgröße und Schriftstil zugewiesen. Diese Werte stehen in den Untereigenschaften Size und Style der Eigenschaft Font zur Verfügung.
- Die Eigenschaft Checked des Untermenüpunkts der ausgewählten Schrift wird auf True gestellt, die beiden jeweils anderen werden auf False gestellt, wie bei der Hintergrundfarbe.
7.1.5 Schriftgröße

Es folgt die Änderung der Schriftgröße über das Kombinationsfeld:
Public Class Form1
Private Sub Form1_Load(...) Handles ...
cboSchriftgröße.Items.Add("8,25")
cboSchriftgröße.Items.Add("10")
cboSchriftgröße.Items.Add("13")
cboSchriftgröße.Items.Add("18")
cboSchriftgröße.SelectedIndex = 0
End Sub
[...]
Private Sub cboSchriftgröße_TextChanged(...
) Handles cboSchriftgröße.TextChanged
Dim schriftgröße As Single
Try
schriftgröße =
Convert.ToDouble(cboSchriftgröße.Text)
Catch ex As Exception
schriftgröße = 8.25
End Try
lblA.Font = New Font(lblA.Font.FontFamily,
schriftgröße, lblA.Font.Style)
End Sub
End Class
Listing 7.4 Projekt »MenüHaupt«, Schriftgröße einstellen
Zur Erläuterung:
- Zu Beginn des Programms wird das Kombinationsfeld mit einigen Werten gefüllt. Einer der Werte ist der Startwert für die Schriftgröße, dieser sollte auch der markierte Wert in der Liste sein. Die Eigenschaft SelectedIndex muss also voreingestellt werden.
- Das Ereignis cboSchriftgröße_TextChanged tritt ein, wenn der Benutzer einen Eintrag aus der Liste auswählt oder in das Textfeld einträgt. Bei einem ungültigen Eintrag wird die Standard-Schriftgröße gewählt.
- Wiederum wird ein neu erzeugtes Objekt der Klasse Font erzeugt und der Eigenschaft Font des Labels zugewiesen.
- Der verwendete Konstruktor erhält die neue Schriftgröße und die aktuellen Einstellungen von Schriftart und Schriftstil zugewiesen. Diese Werte stehen in den Untereigenschaften FontFamily und Style der Eigenschaft Font zur Verfügung.
7.1.6 Schriftstil
Zuletzt wird die Änderung des Schriftstils vorgenommen:
Public Class Form1
[...]
Private Sub mnuFett_Click(...) Handles ...
lblA.Font = New Font(lblA.Font.FontFamily,
lblA.Font.Size,
lblA.Font.Style Xor FontStyle.Bold)
mnuFett.Checked = Not mnuFett.Checked
End Sub
Private Sub mnuKursiv_Click(...) Handles ...
lblA.Font = New Font(lblA.Font.FontFamily,
lblA.Font.Size,
lblA.Font.Style Xor FontStyle.Italic)
mnuKursiv.Checked = Not mnuKursiv.Checked
End Sub
[...]
End Class
Listing 7.5 Projekt »MenüHaupt«, Schriftstil einstellen
Zur Erläuterung:
- Das neu erzeugte Objekt der Klasse Font bekommt den neuen Schriftstil und die aktuellen Einstellungen von Schriftart und Schriftgröße zugewiesen.
- In der Untereigenschaft Font.Style stehen mehrere Möglichkeiten zur Verfügung, die einzeln oder gemeinsam auftreten können: fett, kursiv, unterstrichen, durchgestrichen, normal.
- Die Untereigenschaft wird intern als eine einzige Bitfolge gespeichert. An dieser Bitfolge kann Visual Basic erkennen, ob eine oder mehrere Möglichkeiten ausgewählt wurden. Zur Einstellung von fett und kursiv würde man die Werte FontStyle.Bold und FontStyle.Italic mit dem Bit-Operator Or (logisches Oder) addieren. Zur Übernahme der bisherigen Werte und der zusätzlichen Einstellung kursiv werden die Werte lblA.Font.Style und FontStyle.Italic mit dem Bit-Operator Xor (logisches Exklusiv-Oder) addiert.
- Zum Abschluss der Prozedur wird der aktuelle Wert der Eigenschaft Checked mithilfe des Operators Not (logisches Nicht) invertiert, da sich dieser Untermenüpunkt wie ein Schalter verhält: kursiv ein (True) oder kursiv aus (False).
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.