【问题标题】:C# Access Method of Form1 on Form2Form2上Form1的C#访问方法
【发布时间】:2012-11-17 20:00:57
【问题描述】:

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

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

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

如果我这样做

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

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

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

我怎么能说它实际上执行了我已经拥有的 Form1 上的方法,从而加载了正确的列表框和值?

非常感谢

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

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

    【讨论】:

    • 合成中是的!你可以很容易地在互联网上找到很多关于事件的代码示例......如果这个答案不够完整。
    【解决方案2】:

    看看:

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

    【讨论】:

      【解决方案3】:

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

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

      在表格 1 中

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

      注意:除非Show(),否则ShowDialog() 方法会等到form2 关闭。

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多