[英]C# Access Method of Form1 on Form2
我的项目中有2个表格。 Form1是主窗体。 我有一个打开Form2的按钮,一个ListView和一个调用URL并用从URL获得的数据馈送给ListView的方法。
Form2有一个用于URL的文本框和一个“确定”按钮。
当我按下Form1上的按钮时,它将打开Form2,没问题。 如果我在Form2的文本框中输入URL,然后按“确定”,如何管理它以将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<UrlEnteredEventArgs>
事件,该事件将提供输入的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之后,您可以轻松地调用它的public方法。
Form1(Application.OpenForms[0] as Form1).method();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.