从一个表格中填写另一个表格

本文关键字:表格 另一个 一个 | 更新日期: 2023-09-27 18:03:19

我有两个窗体在我的项目,一个是按钮和第二个是两个文本框。当我点击第一个表单按钮时,我想在另一个文本框中填充文本框。

代码:

secondForm secondForm = new secondForm();
secondForm.MdiParent = this.MdiParent;
secondForm.fillForm("String");
if (formShown != true)
{
    secondForm.Show();
    formShown = true;
}
else
{
    Application.OpenForms[secondForm.Name].Focus();
}

public void fillForm(string text)
{
    if (String.IsNullOrEmpty(priceText1.Text))
    {
        priceText1.Text = text;
    }
    else
    {
        priceText2.Text = text;
    }
}

看起来很简单,但当我点击按钮第二次,它不检测文本在第二形式文本框和输入数据在textbox1而不是textbox2,为什么?

从一个表格中填写另一个表格

问题是,当您第二次单击按钮时,您正在创建表单的第二个实例,然后只是不显示它(您正在关注第一个实例而不是)。你应该重构程序,这样你就不会那样做了。

private secondform secondform = null;
private void Foo()
{
    if(secondForm == null)
    {
        secondForm = new secondForm();
        secondForm.MdiParent = this.MdiParent;
        secondForm.Show();
    }
    secondForm.fillForm("String");
    secondForm.Focus();
}

因此,只有在我们还没有新实例的情况下才会创建新实例,我们每次都填充数据,然后关注表单。

注:第一次对焦没有什么错,所以我在if结束后就把它留下了。如果有一些事情应该只发生在它不是第一次,我们可以添加一个elseif,并把代码在那里。

P.S.S.secondForm没有遵循类名的标准命名约定。类名应该以大写字母开头,例如SecondForm。在其他问题中,这消除了关于secondForm是引用类型还是引用类型的实例的歧义。

P.S.S.S.在您的情况下,它可能不是需要的功能,但我们可能需要正确处理子表单关闭然后再次单击按钮的情况。处理此问题的最简单方法是在关闭表单时清除secondForm实例字段(如果发生这种情况,则在下次单击按钮时创建一个新的实例字段)。闭包使得这很简单,我们只需要在secondForm.Show();:

前面添加这一行
secondform.FormClosed += (s, arg) => secondform = null;