所以你的Form2
需要有一些值,由创建它的任何东西提供,才能存在。永远不应该有没有这些信息的Form2实例。这告诉你它应该在该表单的构造函数中(而不是该表单上的属性)。
这意味着在Form1
中,你会有类似这样的代码:
string someData; //populate based off of user input
Form2 childForm = new Form2(someData);
//then hide current form and show child form
在Form2中,您可能已经有一个构造函数,您只需要将其修改为类似以下内容的形式:
public Form2(string someData) //TODO give better parameter name
{
someLabel.Text = someData;
}
接下来我们需要处理子窗体返回到父窗体的问题。我认为最好的方法是使用事件。该窗体有一个
FormClosing
事件,您可以将其附加到;这将允许您的父窗体在子窗体关闭时运行一些代码。
string someData; //根据用户输入填充
Form2 childForm = new Form2(someData);
childForm.FormClosing += (sendingForm, args) =>
{
this.Show();
bool result = childForm.DidUserAccept;
}
在这里,我在子窗体上使用了一个属性DidUserAccept
,用于判断用户是否接受或拒绝该值。我们需要在Form2中定义它:
public bool DidUserAccept {get; private set;}
在接受/取消按钮的单击处理程序中,您可以相应地设置结果,然后关闭表单(关闭将触发关闭事件并运行
Form1
中相关的代码)。