2013-01-16 17 views
6

Ich habe ein Windows-Formular, ich brauche, wenn Benutzer drücken Geben Sie setzen Sie den Fokus auf die nächste Kontrolle. Irgendeine Idee, wie man diese achtet (ohne Key Press Ereignisse zu verwenden)Ändern Fokus-Steuerelement, wenn die Eingabetaste drücken

+1

Ohne das KeyPress Ereignis, das Sie nicht wissen können, dass der Benutzer die Taste –

+0

Enter gedrückt, was etwa ProcessCmdKey Ereignis – user1659922

Antwort

6

Sie können die KeyPreview Ihres Formulars abfangen. Set KeyPreview auf true im Konstruktor und dann können Sie verwenden, um dies:

protected override bool ProcessKeyPreview(ref Message m) 
{ 
    if (m.Msg == 0x0100 && (int)m.WParam == 13) 
    { 
     this.ProcessTabKey(true); 
    } 
    return base.ProcessKeyPreview(ref m); 
} 
+1

+1: Ich habe nie dieses – horgh

0

Wenn Sie nicht wollen, Tastendruck-Ereignisse verwenden, werden Sie ProcessCmdKey

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Return) 
    { 
     MessageBox.Show("You pressed the Enter key"); 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

wusste nächste Kontrolle zu konzentrieren ich habe SendKeys.Send verwenden ("{ Tab}") – user1659922

1

Sie verwenden können, außer Kraft zu setzen haben ProcessCmdKey überprüfen, ob keyData enthält die Geben Sie Key ein und verwenden Sie dann die SelectNextControl Methode, um Ihren Fokus festzulegen.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData.HasFlag(Keys.Enter)) 
    { 
     SelectNextControl(ActiveControl,true,true,true,true); 
     return true; //Stops the beeping 
    } 

    return base.ProcessCmdKey(ref msg, keyData); 
} 
Verwandte Themen