我有一个带有KeyPress事件控件的表单。例如:
private void MyTextBoxKeyPress(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
*****
}
}
从这个"父母"我称之为另一种形式:
Application.Run(new ChildForm());
现在我选择一个父窗体的控件,然后按Enter按钮。但什么都没有?按键不拍摄事件。
我有两种形式:
KeyPreview=false;
我在这里做错了什么?如何以父母形式拍摄关键新闻事件?
答案 0 :(得分:4)
这对我来说很好,不同之处在于它是按键事件所以它包含KeypressEventArgs
private void MyTextBoxKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
*****
}
}
用于keydown事件
private void MyTextBoxKeyPress(object sender, KeyEventArgs e)
{
if (e.KeyValue == (char)Keys.Enter)
{
/*only use Apllication.run(..) in Application entry point when starting Application. it makes current thread to communicate with window and main thread is enough to do it .
* if Form layout is already there
*
*/
new Form2().Show();
/*
* if you want to make new Form programmatically and only resume from same line if form is closed
*
*/
Form form = new Form();
form.ShowDialog();
}
}
答案 1 :(得分:1)
仅使用1 Application.Run
(这适用于您的主要表单)。
您可以通过创建并显示其他表单来显示:
Form frm = new ChildForm();
frm.Show()
答案 2 :(得分:1)
首先,你不能使用" Application.Run"用于展示新形式。 你应该使用" Show" froms的方法。 以下代码可以帮助您。
我有2个表格,比如你说的。 第一个是名为" parentForm"的父表单。第二是childForm 从parentForm调用childForm。"我调用了parentForm Load" 并从parentForm为childForm设置事件委托并捕获按键。
private void parentForm_Load(object sender, EventArgs e)
{
childForm frm2 = new childForm();
frm2.KeyPress += frm2_KeyPress;
frm2.Show();
}
void frm2_KeyPress(object sender, KeyPressEventArgs e)
{
//some codes here about what to do
}
希望帮助它...