开发者

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;

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜