2012-08-15 42 views
3

我有1個MDI窗體,其中包含1個面板控件,以及1個帶有1個按鈕的窗體,用於使MDI中的面板不可見。調用Windows窗體中的公共方法

代碼在MDI窗體:

public void displayInit() 
    { 
     panel1.Visible = false; 
    } 

代碼到Form1:

 private void button1_Click(object sender, EventArgs e) 
    { 
     displayInit(); 
    } 

的錯誤是:名稱 'displayInit' 不在當前情況下存在, 有什麼建議嗎?

+0

當你說MDI窗體你是指MDI子窗體還是父窗體? – 2012-08-15 16:03:34

回答

4

嘗試引用父(然後將其丟):

((MyMDIForm)this.MDIParent).displayInit(); 

這可能是不這樣做,雖然最好的辦法。考慮讓兒童表格向MDI家長舉辦活動。關注點分離。

+0

現在工作,謝謝LarsTech,請你澄清一下你的評論:「考慮讓孩子向MDI父母提出一個事件,分離顧慮。」 – 2012-08-15 16:19:03

+0

@AlphaBird你的孩子表單不應該真正知道父表單的細節。這會使未來難以維護代碼。因此,不要強制子表單知道父項的任何內容,您可以讓孩子舉出一個事件,如'UpdateDisplay(...)'。當你創建你的子窗體時,你可以添加這個事件處理程序,當事件被調用時,主窗體可以調用'displayInit()'本身。您可以將該方法更改爲私有,而不是公開。 – LarsTech 2012-08-15 16:27:31

+0

好的,非常感謝。 – 2012-08-15 16:36:10

0

方法displayinit()實例方法,所以你需要一個實例構造MDI窗體時從

MyMDIForm.displayInit(); 

稱之爲保持對它的引用,並調用它的方法時,使用該引用。

+0

MyMDIForm.displayInit();不起作用,請說明「保持對MDI表格的參考」的含義。 – 2012-08-15 16:24:22

+1

@AlphaBird當調用另一個表單上的方法時,您需要訪問另一個表單,在這種情況下,您可以在構建表單時使用MDIParent作爲其他情況下的快捷方式,您將使用MyForm FormInstance = new MyForm();然後當任何需要引用MyForm的地方都會使用FormInstance。那有意義嗎? – 2012-08-16 08:00:42

+0

謝謝JamesB,是MyForm FormInstance = new MyForm();是有用的。 [你能告訴我們如何刷新FormInstance顯示](http://stackoverflow.com/questions/11996273/how-to-modify-a-form-and-refresh-it-from-another-form) – 2012-08-16 22:21:44

相關問題