我的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方法来处理它。

关于c# - 发送击键以控制.Net,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1560022/

10-10 15:08