Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中动态创建的winform的按键事件#_C#_.net_Windows_Keypress - Fatal编程技术网

C# C中动态创建的winform的按键事件#

C# C中动态创建的winform的按键事件#,c#,.net,windows,keypress,C#,.net,Windows,Keypress,我正在运行时创建windows窗体。现在,我希望为动态创建的表单触发按键事件。 如何在C#中创建/绑定事件到新创建/动态创建的windows窗体 谢谢,试试这个 Form dynamicForm = new Form(); dynamicForm.KeyPress += new KeyEventHandler(onkeyPress); void onkeyPress(object sender, KeyEventArgs e) { Console.WriteLi

我正在运行时创建windows窗体。现在,我希望为动态创建的表单触发按键事件。 如何在C#中创建/绑定事件到新创建/动态创建的windows窗体

谢谢,试试这个

Form dynamicForm = new Form();

dynamicForm.KeyPress += new KeyEventHandler(onkeyPress);    


 void onkeyPress(object sender, KeyEventArgs e)
 {
        Console.WriteLine("test");
 }

如果我们取一个文本框,它是这样的

    private void Form1_Load(object sender, EventArgs e)
    {
        TextBox myTextBox = new TextBox();
        myTextBox.KeyPress += new KeyPressEventHandler(myTextBox_KeyPress);

        this.Controls.Add(myTextBox);
    }

    void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        //Do Key press event work here
    }
更新

确保焦点应在
Form2

确保表单设置为true,这样它将看到击键

从以上链接:

当此属性设置为true时,表单将接收所有按键、按键向下和按键向上事件。表单的事件处理程序完成对击键的处理后,击键将被分配给具有焦点的控件。例如,如果KeyPreview属性设置为true,并且当前选择的控件是TextBox,则在表单的事件处理程序处理击键后,TextBox控件将接收按下的键。若要仅在窗体级别处理键盘事件,而不允许控件接收键盘事件,请将窗体的按键事件处理程序中的KeyPress EventArgs.Handled属性设置为true

因此,您将需要执行以下操作:

public partial class Form1 : Form
{
    Form2 f2;
    public Form1()
    {
        InitializeComponent();
        KeyPreview = true;
        KeyDown += Form1_KeyDown;
    }

    void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if(e.Control)
        {
            switch(e.KeyCode)
            {
                case Keys.C:
                    MessageBox.Show("Cntrl C");
                    break;
                case Keys.V:
                    MessageBox.Show("Cntrl V");
                    break;
                default:
                    break;
            }
        }
    }
}

哪种类型的控制按键?如“Ctrl+C”或“Ctrl+V”,您可以通过查看Seminda或Shujaat的答案找到有关如何处理按键的示例。此处有更多文档:尝试了相同的代码。。但事件仍然没有被触发。在选项卡控件上,放置动态生成的表单。甚至尝试了tab控件的按键事件。。。但还是一样..尝试了相同的代码。。但仍然不会触发事件。即使在KeyPreview属性设置为true之后。。还是一样。。存在。不知道你的问题是什么,而不知道你是如何实现它的。我给你的代码是工作代码