[visual-studio]UserControl KeyDown 事件不触发反对撤销的 Windows 应用程序 KeyDown 事件

发布时间: 2014/3/1 2:32:09
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

UserControl 和面临的问题的 KeyDown 事件了我的用户控件将反对撤销的 windows 窗体 keydown 事件像下面所示:

用户控件的事件:

private void UserControl_KeyDown(object sender,KeyEventArgs e)
{
        if ((Keys)e.KeyCode == Keys.Escape) 
        {
            this.Visible = false;

        }

}

上述事件将不得不隐藏 UserControl 但事件不火因撤销的 windows 窗体 keydown 如下所示:

Windows 窗体:

private void button1_Click(object sender, EventArgs e)
{
        panel1.SendToBack();
        panel2.SendToBack();
        panel3.SendToBack();
        panel4.SendToBack();
        am.Focus();
        this.KeyDown -= new KeyEventHandler(Form1_KeyDown);

}

这将显示用户控件,将用户控件添加到 windows 窗体,如下所示:

    private UserControl.UserControl am = new UserControl.UserControl();
    public Form1()
    {
        InitializeComponent();
        this.Controls.Add(am);

    }

我想要撤销的 winform keydown 事件反对可见的 UserControl 和火的 UserControl 的 keydown 事件隐藏 UserControl,但它不是很好。Keydown 事件的 UserControl 事件不是火。不知道为什么?。如何做同样适当的方式?。

解决方法 1:

键盘通知过帐到具有焦点的控件。也就是几乎从来没有 UserControl,它不想让焦点。即使显式地将焦点设置用 Focus() 方法,它将立即把它交给它的子控件之一。用户控件被设计为只是其他控件的容器。

而重写 ProcessCmdKey() 方法。将此代码粘贴到控件类:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == Keys.Escape) {
            this.Visible = false;
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

要小心使用 Esc 键并不是最伟大的想法,把您的用户控件放在窗体可能有需要那把钥匙。像一个对话框。

赞助商