我有一个程序需要来自另一个表单的数据,我需要在不创建第一个表单的新实例的情况下传递它。我怎样才能做到这一点?
前任。
Form2 f2 = new Form2();
f2.showdialog();
当 f2 显示时,它们是一个带有项目的列表视图,当我单击一个项目时,我希望将项目发送回第一个表单而不关闭 form2 并且不实例化一个新的 Form1。
我需要在不创建第一个表单的新实例的情况下传递它。
这意味着您在后台打开了您的第一个表单。您可以使用Application.OpenForms
属性来获取已经打开的表单,然后从那里获取数据。就像是:
Form2 f2 = Application.OpenForms["Form2"] as Form2;
if(f2 != null)
string data = f2.SomeProperty;
您正在寻找某种事件。
public event EventHandler MyButtonClicked;
在你使用 ShowDialog();
Form2 f2 = new Form2();
f2.MyButtonClicked += f2_MyButtonClicked;
f2.showdialog();
以及处理事件的地方
void f2_MyButtonClicked(object sender, EventArgs e)
{
//Here you want to grab your list. You can get f2 from sender.
Form2 f2 = (Form2)sender;
throw new NotImplementedException();
}
当您在 Form2 中单击引发事件的按钮时。
void myButtonClicked(object sender, EventArgs e)
{
if (MyButtonClicked != null)
{
MyButtonClicked(this, new EventArgs());
}
}
如果您想了解更多有关事件的信息,请查看。
http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx
也许在 form1 中创建一个 mutator(set) 方法。当您希望将数据传回 form1 时,请调用 mutator 方法来更新表单。
可能最简单的方法是拥有一个可公开访问的方法,Form1
该方法知道如何处理新项目。然后在Form2
有一个Form2
对象的引用。要么Form2
有一个属性,要么你设置Form1
为父级Form2 f2 = new Form2(f1)
(或者this
如果你从 f1 调用它)。
现在您有了对该Form1
对象的引用,您可以调用它的方法来处理该项目。