从一个表格中填写另一个表格
本文关键字:表格 另一个 一个 | 更新日期: 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
结束后就把它留下了。如果有一些事情应该只发生在它不是第一次,我们可以添加一个else
到if
,并把代码在那里。
P.S.S.secondForm
没有遵循类名的标准命名约定。类名应该以大写字母开头,例如SecondForm
。在其他问题中,这消除了关于secondForm
是引用类型还是引用类型的实例的歧义。
P.S.S.S.在您的情况下,它可能不是需要的功能,但我们可能需要正确处理子表单关闭然后再次单击按钮的情况。处理此问题的最简单方法是在关闭表单时清除secondForm
实例字段(如果发生这种情况,则在下次单击按钮时创建一个新的实例字段)。闭包使得这很简单,我们只需要在secondForm.Show();
:
secondform.FormClosed += (s, arg) => secondform = null;