2014-07-14 77 views
2

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

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

使用下面的代码我能够从父窗体访问子窗体中的控件。 我想要访问子窗体中的函数/方法。例如:from.newmethod();

是否有可能实现这一目标,而无需使用C#.NET

由于创建form.It Windows应用程序的新实例。

回答

1

声明一种方法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. 
    } 
} 
+0

我没有得到这个frm.delmyfunction之外。 – user3541403

+0

我可以在父窗体中访问此代理,并且我已声明子窗体 – user3541403

+0

中的代理在声明'delegate'时出错。更改'公共委托子委托姓名();'这一行到'公共委托无效委托姓名();' – Shell

相关问题