我在运行时创建了一个Windows窗体。现在我希望为动态创建的表单触发按键事件。 如何在C#中创建/绑定事件到新/动态创建的窗体。
谢谢,
答案 0 :(得分:2)
试试这个。
Form dynamicForm = new Form();
dynamicForm.KeyPress += new KeyEventHandler(onkeyPress);
void onkeyPress(object sender, KeyEventArgs e)
{
Console.WriteLine("test");
}
答案 1 :(得分:2)
如果我们把文本框改成这样的话。
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
。
答案 2 :(得分:2)
确保表单KeyPreview Property设置为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;
}
}
}
}