2017-03-04 78 views
-2

我在項目C#中有兩個Windows窗體。如何獲得父窗體?

public partial class Form1 : Form 
{ 
    public void add(){ 
     // 
    } 
} 

public partial class FormAdd : Form 
{ 
    // 
} 

Form1按鈕,點擊之後我打開FormAdd

var form = new FormAdd(); 
      form.Show(); 

經過FormAdd我嘗試調用父類的方法add

Form1 f = new Form1(); 
f.add(); 

但我不能訪問任何方法和父窗體的屬性。

我得到錯誤:

enter image description here

+0

該錯誤表示您的代碼行不在**表單代碼中。最有可能你有不匹配的括號。另外,你應該總是把代碼放在自己塊中的if語句中。這個'position = 0'行是一個等待發生的錯誤。 –

回答

0

一種方法是在傳遞Form1中爲您FormAdd實例在節目的擁有者()調用:在FormAdd

public partial class Form1 : Form 
{ 

    private void button1_Click_1(object sender, EventArgs e) 
    { 
     var form = new FormAdd(); 
     form.Show(this); // pass this instance of Form1 in as the Owner of our FormAdd instance 
    } 

} 

現在,過,將所有者屬性投放到Form1並調用add():

public partial class FormAdd : Form 
{ 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (this.Owner is Form1) 
     { 
      Form1 f1 = (Form1)this.Owner; 
      f1.add(); 
     } 
    } 

} 
+0

謝謝,但是如何在Form1中獲取公共變量? – SFSFSFSF

+0

?...就像我證明你可以在Form1中訪問** public **方法'add()'一樣。 –

0

基於yo你的照片,嘗試添加一個括號上面的代碼。由於錯誤似乎是在你的情況的範圍。

這應該是這樣的:

else 
    position = 0; 
//{ <-- Remove this and put it below 
    if (this.Owner is Form1) 
    { 
     //TODO: 
    } 
    } //This should be here 

一切都應該後正確編譯。