2013-02-27 200 views
2

我有一个程序需要来自另一个表单的数据,我需要传递它而不创建第一个表单的新实例。我怎样才能做到这一点?将数据传递到现有表格

ex。

Form2 f2 = new Form2(); 

f2.showdialog(); 

时F2显示,他们是项目的列表视图,当我点击一个项目,我想这个项目被发送回第一种形式,但不关闭窗口2并没有实例化一个新的Form1中。

+0

你可以简单地在你的form2中创建一个公共变量'selectedItem'或者其他东西,然后点击它来指定它 – 2013-02-27 12:25:42

+0

'f2.showdialog();'应该是'f2.ShowDialog();' – 2013-02-27 12:25:43

回答

1

我需要通过它而不创建第一个窗体的新实例。

这意味着您的第一个窗体在后台打开。您可以使用Application.OpenForms属性获取已经打开的表单,然后从那里获取数据。 是这样的:

Form2 f2 = Application.OpenForms["Form2"] as Form2; 
if(f2 != null) 
    string data = f2.SomeProperty; 
0
也许

创建在Form1增变(组)方法。当您希望将数据传回form1时,请调用mutator方法来更新表单。

1

您正在寻找某种事件。

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

+0

清晰,简洁并且有一个例子;如果可以的话,我会加倍努力。 – Jonathan 2013-02-27 12:28:58

+0

@Jonathan非常感谢。 – Evelie 2013-02-27 12:29:50

0

也许最简单的办法就是在Form1可公开访问的方法,知道如何处理新项目。然后在Form2中有对Form2对象的引用。 Form2有一个属性,或者您设置Form1作为父母Form2 f2 = new Form2(f1)(或this如果您从f1调用它)。

现在您已经参照了Form1对象,您可以调用它的方法来处理该项目。