False keyvalues are passed on keydown event
I have a MDI parent form. When user presses Enter I want the Application to shut down.
I check the keydown event as follows:
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == (int)Keys.Enter)
{
Application.Exit();
}
}
Now it works fine, when I don't have any clickable controls on form (Button, TextBox etc). The e.KeyValue
has the (int)
value of Enter Key (13). But if I put some buttons or textboxes on to MDI Form, e.KeyValue
brings the keyvalue of Alt
Key i.e. 18. Why so ??
So now if I press Alt+Enter
, the 开发者_运维百科form closes; but not only on Enter Key
Thanks in advance
You need to process the KeyPress a little sooner. The following code will work for you:
protected override bool ProcessKeyPreview(ref System.Windows.Forms.Message m)
{
int _ENTER = 13;
int _KEYUP = 257;
if (m.Msg == _ENTER && (int)m.WParam == _KEYUP)
{
Application.Exit();
}
return base.ProcessKeyPreview(ref m);
}
Use e.KeyCode and e.Modifiers;
精彩评论