Shortcut bei ToolstripMenuitem funktioniert nur einmal

03/07/2008 - 22:11 von Armin Zingler | Report spam
Hallo Leute, (VB 2008 Express, WinForm-Anwendung)

auf einer Form habe ich ein TableLayoutPanel, das ein paar Buttons enthàlt.
Die Form enthàlt ansonsten nur noch ein MenuStrip mit einem Hauptmenüpunkt
und einem Untermenüpunkt (jeweils vom Typ ToolStripMenuItem). Beim
Untermenüpunkt ("Aktualisieren") ist F5 als Shortcut angegeben. Zur Laufzeit
funktioniert das beim ersten Mal auch: Beim Betàtigen von F5 wird der
Click-Handler ausgeführt, d.h. es werden alle Controls im TableLayoutPanel
entfernt und wieder welche hinzugefügt ("aktualisieren" eben).

Das Problem ist jetzt, dass das erneute Betàtigen von F5 keine Wirkung mehr
hat. Erst, wenn ich einen Button fokusiere (mit linker Maustaste
herunterdrücken aber die Maustaste außerhalb loslassen), dann funktioniert
F5 auch wieder.

Welche Voraussetzungen müssen denn gegeben sein, damit der Shortcut
funktioniert? Die Keypreview-Eigenschaft der Form auf True zu setzen, bringt
(erwartungsgemàß) auch nichts.


Armin
 

Lesen sie die antworten

#1 Armin Zingler
04/07/2008 - 15:00 | Warnen spam
"Armin Zingler" schrieb
Welche Voraussetzungen müssen denn gegeben sein, damit der Shortcut
funktioniert?



Habe die Ursache gefunden und einen Workaround eingebaut.

Reduziertes Demo-Projekt:
http://freenet-homepage.de/armin.zi...efresh.zip

Wie man am Button-Text sieht, hat F5 ab dem 2. Mal keine Wirkung mehr.

Erklàrung dazu: Im Demo-Projekt liess sich das Problem zuerst nicht
reproduzieren. Mit der Hierarchie TableLayoutPanel -> Button
funktioniert es. Mit TableLayoutPanel -> Panel -> Button jedoch nicht. Um
den anderen Fall zu testen, im Demo-Projekt einfach "if true then" durch "if
false then" ersetzen.

Beobachtet habe ich, dass, bei Verwendung eines Panels, die
Activecontrol-Eigenschaft der Form nach Betàtigung von F5 Nothing ist.
Höchstwahrscheinlich, weil ein Panel keinen Fokus bekommen kann. Das scheint
wohl die Ursache dafür zu sein, dass F5 dann nicht mehr funktioniert. Habe
noch keine Ahnung, warum das so ist.

Als Würgaround hilft nach dem Refresh:

If Me.ActiveControl Is Nothing Then
Me.TableLayoutPanel1.Focus()
End If


Armin

Ähnliche fragen