Form2上Form1的C#访问方法

我的项目中有2个表单。 Form1是主要表格。 在那里,我有一个按钮来打开Form2,一个ListView和一个调用url的方法,并使用从url获取的数据提供ListView。

Form2有一个url文本框和一个“Ok”按钮。

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

如果我做

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

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

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

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

非常感谢

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类型的EventHandler ,该事件将为订阅者提供输入的URL。

看一看:

 //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调用(传递参数)。 我希望这有帮助。

在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顶部。

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

您可以遍历Application.OpenForms并检查表单名称。 找到Form1后,您可以轻松调用其公共方法;

 Form1(Application.OpenForms[0] as Form1).method();