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

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

MenuStrip
Zur Erstellung eines Hauptmenüs wird das Steuerelement MenuStrip aus der Abteilung Menüs & Symbolleisten aus der Toolbox auf das Formular gezogen. Es erscheint anschließend an zwei Stellen:
- 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ü mit erstem Untermenü
Untermenü
Zunächst kann im Formular der erste Punkt des Hauptmenüs eingetragen werden. Anschließend kann man entweder einen Untermenüpunkt zu diesem Hauptmenüpunkt eintragen (nach unten) oder einen weiteren Hauptmenüpunkt (nach rechts). Dieser Vorgang wird fortgesetzt, bis man zuletzt alle Haupt- und Untermenüpunkte (gegebenenfalls mit weiteren Untermenüs unter Untermenüs usw.) eingetragen hat.
Menü ändern
Möchte man 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 man sie besser im Code handhaben kann. 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 MS Word, oder
ComboBox
- eine Textbox.
Separator
Bei einem Untermenüpunkt kann man zusätzlich noch den Eintrag »Separator« wählen. Dieser dient zur optischen Trennung von Menüpunkten (siehe Abbildung 7.2).
Das Zeichen »&«
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.
Abbildung 7.2 Untermenü, verschiedene Möglichkeiten
Schalter an/aus
Außerdem können Menüpunkte mit einem Häkchen gekennzeichnet werden, wie ein Kontrollkästchen. Damit kann man einen Zustand kennzeichnen, wie z. B. die aktuelle Hintergrundfarbe des Labels unten im Formular.
7.1.2 Code des Hauptmenüs 

Das wichtigste Ereignis eines »normalen« Menüpunkts ist der Click. Dieser wird mit einer Ereignisprozedur verbunden. Mithilfe des dargestellten Programms (p0701) können eine Reihe von Abläufen 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 (in p0701):
Public Class frm0701
[ ... ]
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 ClassZur Erläuterung:
- Nach dem Kopieren eines leeren Textfelds in das Label wird der Text »(leer)« eingeblendet, damit man die anderen Einstellungen noch sehen kann.
Abbildung 7.3 Programm p0701, Untermenüpunkt Hintergrund
Die Ereignisprozeduren zur Einstellung der Hintergrundfarbe (ebenfalls in p0701) lauten wie folgt:
Public Class frm0701
[ ... ]
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 ClassZur 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.
Checked
- Man sollte darauf achten, dass die Startwerte der jeweiligen Checked-Eigenschaften auch mit dem Startwert der Hintergrundfarbe übereinstimmen.
Die restlichen Ereignisprozeduren bewirken Änderungen bei Schriftart, Schriftgröße und Schriftstil. Dazu muss zunächst die Klasse Font näher betrachtet werden.
7.1.3 Klasse Font 

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.
Konstruktoren
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 (ebenfalls in p0701):
Abbildung 7.4 Programm p0701, Untermenüpunkt Schriftart
Public Class frm0701
[ ... ]
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 ClassZur Erläuterung:
- In den Prozeduren wird ein neu erzeugtes Objekt der Klasse Font der Eigenschaft Font des Labels zugewiesen.
Font
- 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.
Size, Style
- 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 (ebenfalls in p0701):
Public Class frm0701
Private Sub frm0701_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 ...
Dim schriftgröße As Single = _
Val(cboSchriftgröße.Text)
lblA.Font = New Font(lblA.Font.FontFamily, _
schriftgröße, lblA.Font.Style)
End Sub
End ClassZur 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.
SelectedIndex
- Das Ereignis cboSchriftgröße_TextChanged tritt ein, wenn der Benutzer einen Eintrag aus der Liste auswählt oder in das Textfeld einträgt.
TextChanged
- 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.
FontFamily
7.1.6 Schriftstil 

Zuletzt wird die Änderung des Schriftstils vorgenommen (ebenfalls in p0701):
Public Class frm0701
[ ... ]
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 ClassZur 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«.
Style
- 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 addieren. Zur Einstellung von »bisherige Werte« und »Kursiv wechseln« werden die Werte lblA.Font.Style und FontStyle.Italic mit dem Bit-Operator Xor addiert.
Or, Xor
- Zum Abschluss der Prozedur wird der aktuelle Wert der Eigenschaft Checked invertiert, da sich dieser Untermenüpunkt wie ein Schalter verhält: »Kursiv ein« (True) oder »Kursiv aus« (False).



Jetzt online bestellen









