0

我的项目中有 2 个表格。Form1 是主窗体。我有一个打开 Form2 的按钮、一个 ListView 和一个调用 url 并向 ListView 提供从 url 获取的数据的方法。

Form2 有一个用于 url 的文本框和一个“确定”按钮。

当我按下 Form1 上的按钮时,它会打开 Form2,没问题。如果我在 Form2 的文本框中输入 url 并按 Ok,我该如何管理它以将 url 传递给 Form1 中的方法?

如果我做

Form1 form1 = new Form1();
form1.method();

它显然会打开一个新的 Form1 实例,在那里执行该方法并在那里填充列表框,但不是在我原来的 Form1 上。

我在网上找到了各种解决问题的方法,但要么太复杂,要么不起作用。

我怎么能说它实际上执行了我已经拥有的 Form1 上的方法,因此用这些值加载了正确的列表框?

非常感谢

4

4 回答 4

4

定义事件Form2并在输入 url 时引发它:

public class Form2 : Form
{
   public event EventHandler UrlEntered;

   private void ButtonOK_Click(object sender, EventArgs e)
   {
       if (UrlEntered != null)
           UrlEntered(this, EventArgs.Empty);
   }

   public string Url { get { return urlTextBox.Text; } }
}

在 Form1 上订阅该事件:

Form2 form2 = new Form2()
form2.UrlEntered += Form2_UrlEntered;
form2.Show();

处理此事件:

private void Form2_UrlEntered(object sender, EventArgs e)
{
   Form2 form2 = (Form2)sender;
   string url = form2.Url;
   // use it
}

您还可以EventHandler<UrlEnteredEventArgs>使用自定义事件参数定义类型的事件,这将为订阅者提供输入的 url。

于 2012-11-17T20:03:34.670 回答
1

看一看:

//In Form1 opening Form2
Form2 frm = new Form2();
frm.Owner = this;
frm.Show();

//Example to call methods in FORM1 from FORM2
private void button1_Click(object sender, EventArgs e)
{
    Form1 frmParent = (Form1)this.Owner;
    frmParent.testeFunction();
    frmParent.InsertInGrid(textBox1.Text);
}

所以,基本上你需要在 Form1 中创建一个函数来从 Form2 调用(传递参数)。我希望这有帮助。

于 2013-09-18T00:59:33.207 回答
0

在 Form2 上定义一个属性以允许访问结果

// In Form2
public string Url { get { return urlTextBox.Text; } }

在 Form1 中

var form2 = new Form2();
form2.ShowDialog(this);
string url = form2.Url;

注意:除非方法等待直到Show()关闭。ShowDialog()form2

ShowDialog参数this是要打开的表单的所有者。它绑定并form2使其form1始终出现在form1.

于 2012-11-17T20:16:53.243 回答
-1

它创建一个新实例,因为您正在调用new

您可以遍历Application.OpenForms并检查表单名称。找到Form1之后,就可以方便的调用它的public方法了;

Form1(Application.OpenForms[0] as Form1).method();
于 2012-11-17T20:05:45.070 回答