繁体   English   中英

在C#中动态创建Winform的Keypress事件

[英]Keypress event for dynamically created winform in C#

我在运行时创建一个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

确保窗体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;
            }
        }
    }
}

暂无
暂无

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

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