Hallo ich habe folgendes Problem. Wir entwickeln für einen Kunden eine Software neu. Innerhalb der bisherigen Software konnte der Kunde über Tastenkombinationen mit ALT in Bereichen arbeiten. (z.B. im Kundenstamm einen Kunden suchen = Alt+S).
Diese Funktionalität möchte ich nun auch gerne Umsetzen. Dafür habe ich rekursiv alle Controls des MainForms durchiterriert und das KeyUp Event einem Delegate zugewiesen. Wenn ich das Delegate debugge erhalte ich auch gültige Werte. Wenn ich nun im Kundenstamm einen Kunden suchen möchte Alt+S wird das Event nicht ausgeführt sondern nur das MainMenu mit dem Eintrag "Stammdaten" aufgeklappt.
Jetzt ist die Frage wieso und wie kann man es deaktivieren? Wie würdet ihr bei sowas vorgehen? Kennt ihr alternativen?
Vielen Dank für eure Ideen etc.
Gruß
Tim
Hallo .tim,
vermutlich ist der MenuItem als "&Stammdaten" definiert. Definiere ihn als "Stamm&daten" oder als "Stammdaten". Dann sollte der Konflikt behoben sein.
Statt des rekursiven Durchgehens verwende besser Form.KeyPreview = true.
herbivore
Die "&-Marken" waren anfangs integriert. Nun habe ich sie rausgenommen, aber es wird nun das erste Zeichen benutzt. Dieser Unterstrich ist aber selbst bei gedrückter Alt Taste nicht mehr zu sehen.
Habe Form.KeyPreview = true eingebaut, vielen Dank dafür.
Diese rekursive Geschichte habe ich rausgenommen. Das Resultat hat sich nicht geändert.
Hallo .tim,
ich denke, es wäre am sinnvollsten die Benutzer zu überzeugen, dass sie in Zukunft Ctrl+S statt Alt+S verwenden müssen.
herbivore
Ich sollte dazu sagen, dass die Anwendung im FW 1.1 angefangen wurde. Ich habe gesehen, dass es nun MenuStrip gibt. Dieses erzeugt diesen Fehler nicht mehr. Ich weiss zwar nicht ob ich mein Menu einfach ersetzen kann, aber werde es mal probieren.
Falls du damit ein Problem siehst sag bitte bescheid
Hallo .tim,
unter 2.0 ist MenuStrip zu verwenden m.E. sogar die Empfehlung.
herbivore
Ok danke 🙂
Ich möchte das Thema noch einmal aufrollen.
Aktueller Stand:
Ich benutze nun das MenuStrip mit 2 Menüpunkten, die auch noch Menüpunkte haben. Bei keinem Menüpunkt ist ein "&" im Namen vorhanden. Die Menüpunkte heissen "Datei" und "Stammdaten". Wenn ich nun Alt+S drücke wird das Key-Up Event ausgelöst und Stammdaten bekommt den Fokus. Das ist zwar nicht schön aber hinnehmbar. Natürlich wäre es schön wenn man den Fokuswechsel aufs Menü verhindern könnte.
Mein Problem ist aber wenn ich die Tastenkombi Alt+D drücke. Dabei wird das Event nicht ausgelöst und nur der Fokus aufs Menü "Datei" gesetzt.
Weiss jemand an was das liegen kann. So langsam nervt die Sache. Ich weiss das es kein Standart ist die Alt Taste fürs Menü zu deaktivieren, aber es sollte doch möglich sein.
Für jede Hilfe bin ich sehr dankbar.
Gruss
Tim
Hallo .tim,
ich sehe keinen Unterschied zwischen Alt+D und Alt+S. Daher würde ich vermuten, dass der Unterschied in deinem Code liegt.
herbivore
Das verstehe ich halt auch nicht.
Wenn ein Breakpoint bei dem Event KeyUp des MainForms gesetzt wird (MainForm.KeyPreview = true), hält dieser nicht bei Alt+D aber z.B. bei Alt+S. Jetzt frage ich mich was an meinem Code falsch sein kann.
Man kann auch nicht abschalten, dass das Menü auf Alt reagiert?
Bei mir läuft es im mom so. Ich möchte die Tastenbefehle nicht global in der MainForm implementieren sondern in den jeweilgen Controls die je nach Content geladen werden. Damit die Taste nicht mehrfach belegt wird, ist das natürlich dokumentiert.
Technisch habe ich das so umgesetzt, dass ich ein Interface erstellt habe. Dieses Interface hat die Methode GlobalKeyUp. Wenn das Event KeyUp des MainForms ausgelöst wird, iteriert es die Controls (rekursiv) und schaut per Reflection ob das Control das IGlobalKeyUp Event implementiert hat. Wenn das der Fall ist, wird die GlobalKeyUp Methode invoked.
So habe ich nun die Controls, die auf verschiedene Tastenkürzel reagiert. Alles funktioniert ausser Alt+D.
Das Problem existiert leider noch immer. Kennt niemand eine Möglichkeit das KeyHandling von dem MainMenü zu entfernen?