Application.Run()和Key Press事件

时间:2014-09-16 11:01:54

标签: c#

我有一个带有KeyPress事件控件的表单。例如:

    private void MyTextBoxKeyPress(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            *****
        }
    }

从这个"父母"我称之为另一种形式:

Application.Run(new ChildForm());

现在我选择一个父窗体的控件,然后按Enter按钮。但什么都没有?按键不拍摄事件。
我有两种形式:

KeyPreview=false;

我在这里做错了什么?如何以父母形式拍摄关键新闻事件?

3 个答案:

答案 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
}

希望帮助它...