2016-11-16 126 views
0

我有两种形式。 Form1有一个标签,Form2有一个按钮。我将Form2作为控件添加到Form1中。当我点击按钮时,我希望标签更新。从静态函数访问非静态字段

代码为Form1:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     RunTest(); 
    } 

    private void RunTest() 
    { 
     Form myForm2 = new Form2(); 
     myForm2.TopLevel = false; 
     this.Controls.Add(myForm2); 
     myForm2.Show(); 
    } 

    public static void UpdateLabel() 
    { 
     label1.Text = "Button Pressed"; //ERROR 
    } 
} 

代码窗体2:

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1.UpdateLabel(); 
    } 
} 

调用UpdateLabel()要求它是静态的,但我不能更新Label1.Text

你有什么建议我应该在这种情况下做什么?当我得到这个工作时,我想添加许多Form2到Form1。

回答

0

Form2中添加Form1类型的属性,并将其从Form1分配给this

private void RunTest() 
{ 
    Form myForm2 = new Form2(); 
    myForm2.otherform = this;    // <--- note this line 
    myForm2.TopLevel = false; 
    this.Controls.Add(myForm2);   // TODO: why is this line here? 
    myForm2.Show(); 
} 

然后,您可以

private void button1_Click(object sender, EventArgs e) 
{ 
    otherform.UpdateLabel(); 
} 

如果你让UpdateLabel()非静态

public void UpdateLabel() 
{ 
    label1.Text = "Button Pressed"; 
}