我有一个程序需要来自另一个表单的数据,我需要传递它而不创建第一个表单的新实例。我怎样才能做到这一点?将数据传递到现有表格
ex。
Form2 f2 = new Form2();
f2.showdialog();
时F2显示,他们是项目的列表视图,当我点击一个项目,我想这个项目被发送回第一种形式,但不关闭窗口2并没有实例化一个新的Form1中。
我有一个程序需要来自另一个表单的数据,我需要传递它而不创建第一个表单的新实例。我怎样才能做到这一点?将数据传递到现有表格
ex。
Form2 f2 = new Form2();
f2.showdialog();
时F2显示,他们是项目的列表视图,当我点击一个项目,我想这个项目被发送回第一种形式,但不关闭窗口2并没有实例化一个新的Form1中。
我需要通过它而不创建第一个窗体的新实例。
这意味着您的第一个窗体在后台打开。您可以使用Application.OpenForms
属性获取已经打开的表单,然后从那里获取数据。 是这样的:
Form2 f2 = Application.OpenForms["Form2"] as Form2;
if(f2 != null)
string data = f2.SomeProperty;
创建在Form1增变(组)方法。当您希望将数据传回form1时,请调用mutator方法来更新表单。
您正在寻找某种事件。
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();
}
当您在窗体2单击引发事件的按钮。
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
可公开访问的方法,知道如何处理新项目。然后在Form2
中有对Form2
对象的引用。 Form2
有一个属性,或者您设置Form1
作为父母Form2 f2 = new Form2(f1)
(或this
如果您从f1调用它)。
现在您已经参照了Form1
对象,您可以调用它的方法来处理该项目。
你可以简单地在你的form2中创建一个公共变量'selectedItem'或者其他东西,然后点击它来指定它 – 2013-02-27 12:25:42
'f2.showdialog();'应该是'f2.ShowDialog();' – 2013-02-27 12:25:43