2

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

前任。

Form2 f2 = new Form2();

f2.showdialog();

当 f2 显示时,它们是一个带有项目的列表视图,当我单击一个项目时,我希望将项目发送回第一个表单而不关闭 form2 并且不实例化一个新的 Form1。

4

4 回答 4

1

我需要在不创建第一个表单的新实例的情况下传递它。

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

Form2 f2 = Application.OpenForms["Form2"] as Form2;
if(f2 != null)
   string data = f2.SomeProperty;
于 2013-02-27T12:25:38.747 回答
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

于 2013-02-27T12:26:10.127 回答
0

也许在 form1 中创建一个 mutator(set) 方法。当您希望将数据传回 form1 时,请调用 mutator 方法来更新表单。

于 2013-02-27T12:25:44.990 回答
0

可能最简单的方法是拥有一个可公开访问的方法,Form1该方法知道如何处理新项目。然后在Form2有一个Form2对象的引用。要么Form2有一个属性,要么你设置Form1为父级Form2 f2 = new Form2(f1)(或者this如果你从 f1 调用它)。

现在您有了对该Form1对象的引用,您可以调用它的方法来处理该项目。

于 2013-02-27T12:32:55.567 回答