子窗体在回车单击时关闭



我有两个表格Frm1Frm2

两者都有单textbox

在第一个形式textbox keyup事件中,如果ENTER KeyChar,则打开第二个形式。

现在KeyUp第二形式textbox事件中,我将关闭此表格,即提交。

现在调用这两个事件。有没有办法摆脱它?

 private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Frm2 frm=new Frm2();
                Frm2.RefToForm1=this;
                frm.StartPosition = FormStartPosition.CenterParent;
                frm.ShowDialog(this);
            }
        }

现在以第二形式

private void textBox2_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
               this.RefToForm1.textBox1.Text=textBox2.Text;
                this.Close()
            }
        }

问题是当我在textBox1上按回车键时,form2立即打开和关闭。

任何解决方案

您可以为- 设置Windows Form属性

1- AcceptButton - 按钮 ID(您必须在哪个按钮上提交。2- CancelButton - 按钮 ID(您必须在哪个按钮上关闭表单。

没有

理由在textBox1聚焦且尚未打开Frm2实例时释放 Enter 键,也会在Frm2 textBox2引发KeyUp事件。

是否确定项目中没有导致此行为的附加代码?您是否尝试过在方法textBox2_GotFocus this.Close()上放置断点,以查看它是否确实在您的方案中执行?

我什至使用您的代码创建了一个小型示例项目,并进行了一些小的修改以使其工作(在注释中解释):

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        Frm2 frm=new Frm2();
        frm.RefToForm1=this; // you said RefToForm1 isn't static and it shouldn't be
        frm.StartPosition = FormStartPosition.CenterParent;
        frm.ShowDialog(this);
    }
}
private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        this.RefToForm1.textBox1.Text=textBox2.Text;
        this.Close(); // missing semicolon
    }
}
public Form1 RefToForm1 { get; set; } // property in Frm2

您可以从此处下载此工作示例项目。

表单 2 中定义一个布尔变量,最初将其设置为 false,然后基于该变量关闭表单。您可以稍后在需要时将其设置为 true。可以使用文本框的 GotFocus 方法将其设置为 true。例如

    textBox2.GotFocus += textBox2_GotFocus; 

textBox2_GotFocus 方法中将布尔值设置为 true。您的key_up方法如下所示:

    private void textBox2_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
           if(boolean_var){
               this.RefToForm1.textBox1.Text=textBox2.Text;
               this.Close();
           }
        }
    }

如果文本框为空,也许您可以阻止第二个表单关闭 - 假设需要进入某些内容才能关闭。

能给我们更多关于您打算用这个做什么的信息吗?也许还有另一种方法可以解决您尝试创建的功能。

最新更新