Linke und rechte Ctrl-Taste

17/12/2009 - 13:55 von Thomas Kehl | Report spam
Hallo zusammen.

Ich habe auf einer Form folgenden Code:

private void Form_KeyUp(object sender, KeyEventArgs e) {
switch (e.KeyCode) {
case Keys.Enter:
if (e.Control) {
this.Insert();
}
break;
}
}

Das funktioniert grundsàtzlich auch tip top. Nun haben mir
verschiedene Kunden (völlig getrennt voneinander) gemeldet, dass es
manchmal vorkommt, dass Ctrl+Enter mit der rechten Ctrl-Taste nicht
funktioniere - d.h. das Insert() nicht ausgeführt wird. Mit der
rechten funktionierts dann. Ich bin nun ein bisschen verwirrt.
Hat evt. jemand von euch àhnliche Erfahrungen gemacht und kann mir
einen Hinweis auf das Problem geben?

Vielen Dank für eure Hilfe.

Beste Grüsse, Thomas
 

Lesen sie die antworten

#1 Frank Dzaebel
18/12/2009 - 10:23 | Warnen spam
Hallo Thomas,

Das funktioniert grundsàtzlich auch tip top. Nun haben mir
verschiedene Kunden (völlig getrennt voneinander) gemeldet, dass es
manchmal vorkommt, dass Ctrl+Enter mit der rechten Ctrl-Taste nicht
funktioniere - d.h. das Insert() nicht ausgeführt wird.



Wenn Du zuerst die Control-Taste (bei gleichzeitigem
Strg-Enter) loslàsst, wird "e.Control" nicht true sein und
das Insert() somit nicht aufgerufen.
Das Problem ist weiterhin, dass die KeyUp-Ereignisse pro Taste
erfolgen. Du kannst es aber zum Beispiel so hinbekommen:

bool enterGedrückt = false;

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter: enterGedrückt = false;
if (e.Control) this.Insert();
break;
case Keys.ControlKey:
if (enterGedrückt) this.Insert();
break;
}
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) enterGedrückt = true;
}
____________

Dann noch allgemein dazu:
Du wirst hier sicher das "this.KeyPreview = true;" gesetzt haben,
denn dann wird der Form-KeyUp-Handler aufgerufen,
bevor das KeyUp-Ereignis an das Steuerelement übergeben wird,
das den Fokus besitzt.

Wenn Du zum Beispiel eine TextBox in der Form hast,
KeyPreview nicht auf true gesetzt hast, und diese fokussiert ist
(TabStop==true), würde das KeyUp-Ereignis an die TextBox gesendet
und somit im Normalfall nicht der Form_KeyUp-Handler aufgerufen.

[Control.KeyUp-Ereignis (System.Windows.Forms)]
http://msdn.microsoft.com/de-de/lib...keyup.aspx

was ggf. wieder über die:

[Control.IsInputKey-Methode (System.Windows.Forms)]
http://msdn.microsoft.com/de-de/lib...utkey.aspx

umgelenkt werden kann.
Letzteres natürlich nur rein theoretisch, da Du sicher
KeyPreview auf true hast.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen