我有一个需要来自另一个表单的数据的程序,我需要传递它而不创建第一个表单的新实例。我怎么能这样做?
离。
Form2 f2 = new Form2();
f2.showdialog();
当f2显示时,它们是带有项目的列表视图,当我单击某个项目时,我希望将项目发送回第一个表单而不关闭form2并且不实例化新的Form1。
答案 0 :(得分:1)
我需要传递它而不创建第一个表单的新实例。
这意味着您在后台打开了第一张表格。您可以使用Application.OpenForms
属性来获取已打开的表单,然后从那里获取数据。
类似的东西:
Form2 f2 = Application.OpenForms["Form2"] as Form2;
if(f2 != null)
string data = f2.SomeProperty;
答案 1 :(得分: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();
}
当您在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
答案 2 :(得分:0)
也许在form1中创建一个mutator(set)方法。当您希望将数据传递回form1时,请调用mutator方法来更新表单。
答案 3 :(得分:0)
可能最简单的方法是在Form1
中拥有一个可公开访问的方法,该方法知道如何处理新项目。然后在Form2
中引用Form2
对象。 Form2
有一个属性,或者您将Form1
设置为父Form2 f2 = new Form2(f1)
(如果您从f1调用它,则为this
)。
现在你有了Form1
对象的引用,你可以调用它的方法来处理这个项目。