如何将初始表单上选择的值传递给主表单?

时间:2012-04-18 23:40:48

标签: c# winforms modal-dialog

我想做一些像这里的答案:

How can I close a login form and show the main form without my application closing?

...但我希望将初始表单上选择的值传递给下一个(主)表单。如果我在主窗体上调用一个被重写的构造函数,那么我在哪里存储该值(在被解除的初始窗体和被调用的主窗体之间)?

OTOH,如果,而不是使用program.cs文件来执行此操作,我在主窗体的Load()事件中创建“初始窗体”(有更好的位置),我可以做这样的事情,但是不可否认,这似乎很卡普尔:

0)将主窗体的大小设置为0,0以隐藏它 1)显示“初始”表单/模态对话框,并将用户选择的值(在按钮单击事件中)存储在表单全局变量中 2)初始表单/模态对话框关闭后,将主表单的大小设置回原来的大小(除非模态结果<> OK,在这种情况下我关闭主表单和应用程序)

我知道有更好的方法可以做到这一点......

2 个答案:

答案 0 :(得分:2)

您不必将值传递给主窗体。就像您的链接解释一样,首先打开您的主表单。然后您的主表单可以打开另一个表单。这种其他形式可以将信息放在主表单可以访问的公共属性中。由于主窗体控制其他窗体的生命周期,主窗体获取另一种窗体的公共属性中保存的信息,然后关闭另一种窗体。

string myVariable;

using (OtherForm otherForm = new OtherForm())
{
  otherForm.ShowDialog();
  myVariable = otherForm.OtherVariable;
}

答案 1 :(得分:1)

尝试使用ApplicationContext(System.Windows.Forms.ApplicationContext)。您可以显示多个表单,如以下MSDN线程中的示例所示。关于数据,您可以拥有一个创建一次的公共数据对象,并在显示表单之前将数据对象传递给它们。

http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext%28v=vs.100%29.aspx

相关问题