从父窗体访问打开窗体上的方法

本文关键字:窗体 开窗 方法 访问 | 更新日期: 2023-09-27 18:12:57

我想从父窗体访问子窗体中的方法。我使用了下面的代码来访问控件。

Form form = (Form)Application.OpenForms["frmname"];
if (tableform != null)
{
    GroupBox grp = (GroupBox)tableform.Controls["grpbxname"];
    Panel table = (Panel)grp.Controls["panelname"];
}

使用下面的代码,我可以从父窗体访问子窗体中的控件。我想以同样的方式访问子窗体中的函数/方法。

from.newmethod();

是否有可能实现这一点,而不创建新的窗体实例。windows应用程序使用c#.net

谢谢。

从父窗体访问打开窗体上的方法

将方法声明为public并不是一个好的做法。您可以创建委托或事件。你可以为那个方法创建公共委托,并从类的外部执行那个委托,或者你可以创建可以从类的外部处理的事件。

public partial class Form1 : Form
{
    public delegate void dMyFunction(string param);
    public dMyFunction delMyFunction;
    public Form1()
    {
        InitializeComponent();
        delMyFunction = new dMyFunction(this.MyFunction);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
    }
    private void MyFunction(string param)
    {
        this.Text = param;
    }
}

现在,你可以从类的外部调用这个委托

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 frm = (Form1)Application.OpenForms["Form1"];
        frm.delMyFunction.Invoke("Hello");
        //On Form load this method will be invoked and Form1 title will be changed.
    }
}