繁体   English   中英

发送击键以控制.Net

[英]Sending keystrokes to control in .Net

我的ActiveX控件包含绘制的各种形状。 控件中使用CTRL-A来选择所有对象。 类似地CTRL-C复制,CTRL-V粘贴等。

但是,当我在.Net应用程序中的Windows窗体中插入此控件时,它不会收到这些键盘事件。 我尝试添加一个PreviewKey事件,这确实允许发送某些击键,例如TAB,但不允许这些修改过的键。

有人知道如何将修改过的键击重定向到用户控件吗?

谢谢。

ActiveX控件可能没有焦点,因此没有接收到键事件。 您可能希望在表单级别处理键事件,然后在ActiveX控件上调用相应的方法。 如果将表单的KeyPreview属性设置为true表单将接收表单上所有控件的键事件。 这样,无论当前关注什么控件,您的快捷方式都应该有效。 这是一个可以用来测试它的快速示例。 创建一个包含多个不同控件的新表单,并修改代码,如下所示:

public Form1()
{
    InitializeComponent();

    KeyPreview = true;  // indicates that key events for controls on the form
                        // should be registered with the form

    KeyUp += new KeyEventHandler(Form1_KeyUp);
}

void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Modifiers == Keys.Control)
    {
        switch (e.KeyCode)
        {
            case Keys.A:
                MessageBox.Show("Ctrl + A was pressed!");
                // activeXControl.SelectAll();
                break;
            case Keys.C:
                MessageBox.Show("Ctrl + C was pressed!");
                // activeXControl.Copy();
                break;
            case Keys.V:
                MessageBox.Show("Ctrl + V was pressed!");
                // activeXControl.Paste();
                break;
        }
    }
}

无论在输入组合键时控件具有什么焦点,都会调用表单的Form1_KeyUp方法来处理它。

您需要捕获密钥并覆盖ProcessCmdKey方法。

class MyDataGrid : System.Windows.Forms.DataGrid

    {
       protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
       {
           ...........

       }
    }

http://support.microsoft.com/kb/320584

KeyPreview只是错误的方法。 尝试使用KeyUp或KeyDown,如下所示:

        private void ControlKeyTestForm_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.A)
                 this.label1.Text = "Ctrl+A pressed";
        }

如果您希望包含表单处理快捷键,请记住将表单上的KeyPreview属性设置为true,然后在表单中设置KeyDown或KeyUp处理程序。

使用Control.ModifierKeys属性检查修改键。

例如,要检查shift键,

尝试if((Control.ModifierKeys&Keys.Shift)== Keys.Shift){}

完整的例子:

http://msdn.microsoft.com/en-us/library/aa984219%28VS.71%29.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM