Ja – auch in VB.NET 2003 kannst du DLLs erstellen, selbst wenn im Dialog „Neues Projekt“ keine „Klassenbibliothek“ auswählbar ist. Entscheidend ist nicht der Projekt...
Warum blockiert ProcessCmdKey in VB.NET 2003 die Shortcuts von MainMenu1?
Antwort vom**`ProcessCmdKey` behindert die Shortcuts von `MainMenu1`, weil diese Methode Tastenkombinationen früher im Nachrichtenweg abfängt als das `MainMenu` – und sobald du dort ein `True` zurückgibst oder `MyBase.ProcessCmdKey(...)` nicht korrekt weiterleitest, bekommt das Menü die Taste gar nicht mehr.** ([syncfusion.com](https://www.syncfusion.com/faq/windowsforms/menus/how-do-menu-shortcuts-work)) ## Warum das passiert In WinForms läuft die Tastaturverarbeitung grob so: fokussiertes Control → übergeordnete Controls/Form → erst dort kann auch das `MainMenu` seine Shortcut-Tasten prüfen. `ProcessCmdKey` ist genau für diese Vorab-Verarbeitung gedacht. Wenn du sie überschreibst, sitzt du also vor dem Menü in der Kette. ([syncfusion.com](https://www.syncfusion.com/faq/windowsforms/menus/how-do-menu-shortcuts-work)) Der entscheidende Punkt ist: Wenn deine Überschreibung eine Taste „verbraucht“, ist die Verarbeitung beendet. Dann werden `MainMenu1`-Shortcuts wie `Ctrl+S` oder `F5` nicht mehr ausgelöst, obwohl sie im Menü korrekt eingetragen sind. Das ist kein spezieller Fehler von `MainMenu1`, sondern die normale Priorität von `ProcessCmdKey`. ([syncfusion.com](https://www.syncfusion.com/faq/windowsforms/menus/how-do-menu-shortcuts-work)) ## Der typische Fehler in VB.NET 2003 Meist sieht das Problem so aus: ```vb Protected Overrides Function ProcessCmdKey( _ ByRef msg As Message, _ ByVal keyData As Keys) As Boolean If keyData = (Keys.Control Or Keys.S) Then MachEtwas() Return True End If Return True End Function ``` Das letzte `Return True` blockiert praktisch **alle** übrigen Tasten – also auch die Menü-Shortcuts. Richtig ist: ```vb Protected Overrides Function ProcessCmdKey( _ ByRef msg As Message, _ ByVal keyData As Keys) As Boolean If keyData = (Keys.Control Or Keys.S) Then MachEtwas() Return True End If Return MyBase.ProcessCmdKey(msg, keyData) End Function ``` So verarbeitest du nur deine eigenen Sonderfälle, und alles andere geht an die normale WinForms-/Menülogik weiter. Dass genau dieses Weiterreichen entscheidend ist, wird auch in Praxisbeispielen zu nicht mehr funktionierenden Menü-Shortcuts beschrieben. ([stackoverflow.com](https://stackoverflow.com/questions/32112942/toolstripmenuitem-shortcutkeys-not-working-unless-menu-has-focus)) ## Wichtiger Unterschied, der oft verwechselt wird `&Datei` oder `&Bearbeiten` sind **Mnemonics** für `Alt+D`, `Alt+B` usw. Die Eigenschaft `Shortcut` eines `MenuItem` ist dagegen ein echter **Shortcut** wie `Ctrl+O` oder `F2`. `ProcessCmdKey` kann beides stören, aber besonders auffällig ist es bei echten Shortcuts, weil diese normalerweise global innerhalb des Formulars funktionieren sollen. ([syncfusion.com](https://www.syncfusion.com/faq/windowsforms/menus/how-do-menu-shortcuts-work)) ## Praktische Konsequenz Wenn du in VB.NET 2003 eigene Tastenkombinationen brauchst, dann gilt: - nur die Tasten selbst behandeln, die du wirklich abfangen willst - in allen anderen Fällen immer an `MyBase.ProcessCmdKey` weitergeben - keine allgemeinen `Return True`- oder „alles selbst behandeln“-Logik einbauen Die klare Empfehlung ist deshalb: **`ProcessCmdKey` nur als Ausnahme benutzen, nicht als zentrale Shortcut-Verwaltung.** Für Standardbefehle ist das `MainMenu1` mit seiner `Shortcut`-Eigenschaft die sauberere Lösung. ([syncfusion.com](https://www.syncfusion.com/faq/windowsforms/menus/how-do-menu-shortcuts-work))
Verwandte Fragen
Gibt es für VB.NET 2003 eine neuere RTF-Box-Version mit SelectionBackColor zum Download?
Nein – für VB.NET 2003 liegt das Problem nicht an deiner „RTF-Box-Version“, sondern am alten .NET-/WinForms-Wrapper: SelectionBackColor gehört nicht zum damaligen RichTextB...
Wie durchsucht man in VB.NET 2003 alle TXT-Dateien in mehreren Ordnern nach einem Begriff und listet passende Dateien mit Ordner auf?
Ja. In VB.NET 2003 ist der saubere Weg: Ordner rekursiv durchlaufen, nur .txt einsammeln, jede Datei mit StreamReader zeilenweise lesen und bei Treffer den vollständigen Pfad ausgeben. Der entsch...