7.2 Kontextmenü
Kontextmenüs werden eingesetzt, um dem Benutzer beim Erlernen der Bedienung eines Programms einen wichtigen Schritt abzunehmen: Im Idealfall muss er nicht mehr überlegen, was er mit den verschiedenen Steuerelementen, die er vor sich hat, machen kann. Er geht mit der rechten Maustaste auf das Element und sieht die Möglichkeiten sofort.
In ihrem Aufbau ähneln die Kontextmenüs sehr stark einem Hauptmenü – mit einem wesentlichen Unterschied: Es muss eine Zuordnung zu einem (oder mehreren) Steuerelementen bestehen.
7.2.1 Erstellung des Kontextmenüs
Zur Erstellung eines Kontextmenüs ziehen Sie das Steuerelement ContextMenuStrip aus der Toolbox auf das Formular. Es erscheint nun ebenfalls sowohl im Formular als auch unterhalb des Formulars, siehe Abbildung 7.7.
Abbildung 7.7 Zwei Kontextmenüs
Sie sollten den Namen ändern: Das Kontextmenü des Textfelds txtEingabe könnte beispielsweise conTxtEingabe heißen. Im Eigenschaftenfenster wählen Sie beim Textfeld txtEingabe in der Eigenschaft ContextMenuStrip das soeben erzeugte Kontextmenü aus.
Menüpunkte eines Kontextmenüs können unabhängig von den Menüpunkten eines Hauptmenüs agieren, sie können aber auch genau parallel agieren. Im letzteren Fall sollten Sie die betreffenden Ereignisse zur gleichen Ereignisprozedur leiten und dafür sorgen, dass die Anzeigen in den jeweiligen Menüs parallel verändert werden.
7.2.2 Code des Kontextmenüs
Das nachfolgende Projekt MenüKontext ist eine Erweiterung des Projekts MenüHaupt. Der Benutzer hat jetzt die folgenden Möglichkeiten:
- Er kann den Schriftstil des Labels in einem Kontextmenü auf Fett ändern.
- Er kann die Eigenschaften ReadOnly und Multiline des Textfelds ändern.
Es folgen die geänderten Teile des Programms:
Public Class Form1
[...]
Private Sub mnuFett_Click(...)
Handles mnuFett.Click, conLblFett.Click
lblA.Font = New Font(lblA.Font.FontFamily,
lblA.Font.Size,
lblA.Font.Style Xor FontStyle.Bold)
mnuFett.Checked = Not mnuFett.Checked
conLblFett.Checked = Not conLblFett.Checked
End Sub
[...]
Private Sub conTxtReadOnly_Click(...) Handles ...
txtE.ReadOnly = Not txtE.ReadOnly
conTxtReadOnly.Checked =
Not conTxtReadOnly.Checked
End Sub
Private Sub conTxtMultiline_Click(...) Handles ...
txtE.Multiline = Not txtE.Multiline
If txtE.Multiline Then
txtE.ScrollBars = ScrollBars.Vertical
Else
txtE.ScrollBars = ScrollBars.None
End If
conTxtMultiline.Checked =
Not conTxtMultiline.Checked
End Sub
End Class
Listing 7.6 Projekt »MenüKontext«
Zur Erläuterung:
- Das Ereignis conLblFett.Click führt zur bereits vorhandenen Prozedur mnuFett_Click(), also zum gleichen Ergebnis, unabhängig davon, ob man den Hauptmenüpunkt oder den Kontextmenüpunkt auswählt. Das Häkchen zur Anzeige der Fettschrift muss natürlich in beiden Menüs gesetzt werden.
- Die Eigenschaft ReadOnly eines Textfelds bestimmt, ob das Textfeld beschreibbar ist oder nicht. Im Normalfall steht diese Eigenschaft auf False. Der Wert dieser Eigenschaft kann zur Laufzeit (in Abhängigkeit von bestimmten Bedingungen) auch geändert werden. Im vorliegenden Programm geschieht dies per Klick im Kontextmenü des Textfelds, siehe Abbildung 7.8.
Abbildung 7.8 Kontextmenü des Textfelds
- Die Eigenschaft Multiline eines Textfelds ist eher bei größeren Textfeldern nützlich. Daher wird zumindest die Eigenschaft ScrollBars auf den Wert Vertical verändert, wenn Multiline auf True gestellt wird. Damit wird der Rest des Textfelds erreichbar.
- Wenn Multiline wieder auf False gestellt wird, dann wird der Wert von ScrollBars auf None zurückgestellt, denn jetzt würden die ScrollBars nur stören.
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.