繁体   English   中英

Form2上Form1的C#访问方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM