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

本文关键字:事件 winform 动态 创建 | 更新日期: 2023-09-27 18:22:03

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

谢谢,

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

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

    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上。

试试这个。

Form dynamicForm = new Form();
dynamicForm.KeyPress += new KeyEventHandler(onkeyPress);    

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

确保表单KeyPreview属性设置为true,这样它就会看到按键。

来自以上链接:

当此属性设置为true时,窗体将接收所有KeyPress、KeyDown和KeyUp事件。表单的事件处理程序完成对键击的处理后,键击将被分配给具有焦点的控件。例如,如果KeyPreview属性设置为true,并且当前选定的控件是TextBox,则在窗体的事件处理程序处理键击后,TextBox控件将接收所按下的键。要仅在窗体级别处理键盘事件而不允许控件接收键盘事件,请将窗体的KeyPress事件处理程序中的KeyPressEventArgs.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;
            }
        }
    }
}