2014-07-14 122 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

相關問題