In VB.NET 2003 bekommst du die Einträge der obersten Ebene eines MainMenu über dessen MenuItems-Auflistung. Für MainMenu1 sind also genau diese Elemente die Menüpunkte der oberen E...
Wie füge ich in VB.NET 2003 allen MainMenu-MenuItems den Handler Men_Click hinzu und werte sie später über Select Case sender.Text aus?
Antwort vom**Ja – aber in VB.NET 2003 musst du den Click-Handler jedem `MenuItem` einzeln oder rekursiv zuweisen, weil `MainMenu` selbst keine Klicks auslöst. Entscheidend ist: Nicht das `MainMenu`, sondern jedes enthaltene `MenuItem` braucht `AddHandler ... AddressOf men_Click`.** ## So funktioniert es Wenn du alle Menüeinträge zentral behandeln willst, gehst du die `MenuItems` durch und hängst überall denselben Handler an: ```vbnet Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddMenuHandler(Me.MainMenu1.MenuItems) End Sub Private Sub AddMenuHandler(ByVal items As Menu.MenuItemCollection) Dim mi As MenuItem For Each mi In items AddHandler mi.Click, AddressOf men_Click If mi.MenuItems.Count > 0 Then AddMenuHandler(mi.MenuItems) End If Next End Sub Private Sub men_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim mi As MenuItem = CType(sender, MenuItem) Select Case mi.Text Case "Öffnen" MessageBox.Show("Öffnen") Case "Speichern" MessageBox.Show("Speichern") Case "Beenden" Me.Close() End Select End Sub ``` ## Wichtiger Punkt `sender.Text` funktioniert grundsätzlich, **ist aber fehleranfällig**, weil Menütexte sich ändern können, z. B. durch: - `&Datei` statt `Datei` - Sprachumschaltung - gleiche Texte an mehreren Stellen Robuster ist in VB.NET 2003 meist dieser Weg: ```vbnet Private Sub men_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim mi As MenuItem = CType(sender, MenuItem) Select Case mi.Name Case "mnuOpen" MessageBox.Show("Öffnen") Case "mnuSave" MessageBox.Show("Speichern") Case "mnuExit" Me.Close() End Select End Sub ``` ## Der praktische Unterschied Mit `Text` steuerst du über die sichtbare Beschriftung. Mit `Name` steuerst du über die interne Kennung. **Für echten Programmcode ist `Name` klar besser, weil die Logik dann nicht kaputtgeht, nur weil sich der Menütext ändert.**
Verwandte Fragen
Wie heißen die einzelnen Menügruppen im MainMenu von VB.NET 2003?
Ja: Diese Einträge heißen in VB.NET 2003 beim MainMenu in der Praxis meist Top-Level-Menüpunkte oder Hauptmenüs; technisch sind es MenuItem-Objekte. Wenn du also „Datei&ldq...