Application.Run()和按键事件

本文关键字:事件 Run Application | 更新日期: 2023-09-27 18:21:58

我有一个带有KeyPress事件的一些控件的窗体。例如:

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

从这个"父"表单,我称之为另一个表单:

Application.Run(new ChildForm());

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

KeyPreview=false;

我在这里做错了什么?如何以家长形式拍摄按键事件?

Application.Run()和按键事件

这对我来说很好,不同的是它是按键事件,所以它包含KeypressEventArgs

    private void MyTextBoxKeyPress(object sender, KeyPressEventArgs e)
    {
         if (e.KeyChar == (char)Keys.Enter)
        {
             *****
        } 
     }

用于键控事件

   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个Application.Run(这是您的主窗体)。

您可以通过创建并显示其他表单来显示:

Form frm = new ChildForm();
frm.Show()

首先,u不能使用"Application.Run"来显示新表单。你应该使用froms的"Show"方法。下面的代码应该对您有所帮助。

我有两种你说的形式。第一个是名为"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
}

希望能帮助它…