Programmierung eines Menüs

Anlage der sichtbaren Hülle des Menüs | Menü einbinden

Menüsteuerung ist bei Windows Standard. Die Anlage einer Menüleiste wird von VB durch einen Assistenten unterstützt und ist in kurzer Zeit zu erledigen. Das praktische Vorgehen wird schrittweise erläutert.


Anlage der sichtbaren Hülle des Menüs

Das Formular, in dem ein Menü eingebaut werden soll, in den Editor (auf den Bildschirm) holen. Nun Im Menü "Extras" der IDE den Punkt "Menüeditor" wählen. Es öffnet sich das im Bild gezeigte Editor-Fenster.

Menüeinrichtung

Man beginnt die Arbeit mit der ersten Menü-Überschrift, die das fertige Formular später zeigen soll; nach Windows-Standard, (der eine Empfehlung bedeutet, keinen Zwang!) wäre das "Datei". Dies (oder ein anderer selbst gewählter Eintrag) ist bei "Caption" einzutragen. In bewährter Weise läßt sich im Caption-Eintrag ein "&" vorsehen, das den Folgebuchstaben unterstreicht und der Tastenbedienung verfügbar macht. Unter "Name" muß ebenfalls etwas eingetragen werden. Mit dem Namen wird der Menüpunkt intern bezeichnet und ausgewertet. Der Programmierstandard sieht vor, daß die Namen von Menüpunkten mit der Kennung "mnu" beginnen, man könnte also hier "mnuDatei" vorsehen. Im unteren Sichtfenster steht nun die gewählte Bezeichnung in der ersten Spalte. Im Prinzip ist der Menüeintrag damit fertig.

Menüeinträge für die einzelnen Rollfenster werden mit Hilfe der Pfeiltasten in die zweite Spalte geschickt. Eine dritte Spalte erzeugt Untermenüs. Im Sichtfenster sind Veränderungen sowohl mit der Maus ("Drag and Drop") als auch mittels der Pfeiltasten und der drei Command-Buttons jederzeit möglich.

Weitere Menüeinträge lassen sich in gleicher Weise erstellen. Wenn sie in der ersten Spalte stehen, werden sie später in der Menükopfleiste als Überschriften der eigentlichen Menüs angezeigt.

Einige weitere Möglichkeiten müssen noch erwähnt werden:

- Vergibt man als Caption ein "-", also ein Minus, muß man auch einen Namen angeben, es erscheint aber dann im Menü nur ein Strich zu Gliederungszwecken

- Index -Eintrag, ist dann erforderlich, wenn ein Menüname zweimal vergeben wurde. Der Index wird dann in der Form MeinName(0), MeinName (1) etc. gebraucht.

- Shortcuts (Tastenkombinationen zum Aufruf des Menüpunktes ) lassen sich angeben. Vorsicht, daß man nicht mit Windows-Shortcuts kollidiert, damit wird die Rechnerbedienung unübersichtlich!

- HelpContextID dient der Erstellung einer contextsensitiven Hilfe, siehe Hilfe-Hilfstext

- Checked setzt ein Häkchen am Menüeintrag, dieses muß programmtechnisch erfragt und nach Bedarf im Programm gesetzt oder gelöscht werden. Damit der Haken sich standardgemäß (wie ein Wechselschalter) benimmt, muß in der sowieso erforderlichen Sub mnuName_Click() z.B die Zeile "mnuName.Checked = Not mnuName.Checked" stehen.

- Enabled ist automatisch zunächst gesetzt ("True"). Wenn es auf "False" steht, ist der Menüeintrag deaktiviert und wird hellgrau angezeigt. Professionell setzt man diese Option, wenn die Menüoption nicht sinnvoll ansprechbar ist. Das ist z.B. in einem Texteditor mit der "Drucken"-Option der Fall, wenn es noch keinen Text gibt. Verwaltet wird diese Eigenschaft im Programmablauf, durch das Setzen dieser Eigenschaft: "mnuName.Enabled = True".

- Visible, im Entwurf zunächst immer auf "True" gesetzt, ermöglicht es, Menüeintäge unsichtbar zu machen. Wenn es sehr viele Menüeinträge gibt, empfiehlt es sich, die (gerade) nicht zugänglichen verschwinden zu lassen, damit die Menüs übersichtlich bleiben.

zum Anfang

Menü einbinden

Das fertige Menü ist zunächst nur tote Hülle. Man füllt mit Programmtext, indem man die Menüpunkte im Entwurf doppelklickt. Es erscheint jeweils das Codefenster mit dem Sub-Rahmen. Angenommen, es geht um den Menüpunkt "Ende", dessen Name "mnuEnde" sein möge, dann erscheint beim Doppelklick das Codefenster mit der Überschrift: "Sub mnuEnde_Click()". Man trägt sachgemäßerweise in die nächste Zeile "End" ein und ist schon fertig. Bei normalen Menüeinträgen folgt in der Regel eine Programmroutine (Sub) die infolge des Click-Ereignisses angesprungen und ausgeführt wird. Dies erfolgt durch Angabe des Namens der Subroutine.

Ergänzung für Fortgeschrittene: Bei der beschriebenen Art der Programmierung ist für die Auswertung jedes einzelnen Menüpunktes eine Sub erforderlich. Das macht den Codebereich unübersichtlich. Durch Verwendung der Indizierungsmöglichkeit läßt sich dieses Problem lösen. Man vergibt im Menüentwurf nur einen Namen, der durch Indizierung für alle Einträge verwendbar wird; z.b. "mnuPunkt". Der Doppelklick auf irgendeinen Menüpunkt öffnet nun einen anderen Sub-Rahmen, dessen einzutragender Code folgt:
 

Private Sub mnuPunkt (Index as Integer)
Select Case Index
Case 1
DateiÖffnen
Case 2
DateiSpeichern
...
Case xy
...
End Select
End Sub

Damit ist die gesamte Menüauswertung abgeschlossen. Nachteilig bei diesem Verfahren ist allerdings, daß die Menünamen den gewünschten Vorgang nicht mehr verraten können, was spätere Änderungen erschwert.

zum Anfang

© R. Hirte * 2001