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 

一切都应该后正确编译。