从静态函数访问非静态字段

时间:2016-11-16 18:46:43

标签: c# winforms

我有两种形式。 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
    }
}  

Form2的代码:

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

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

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

对于这种情况,我有什么建议吗?我希望在我开始工作时向Form1添加许多Form2。

1 个答案:

答案 0 :(得分:0)

Form2中添加Form1类型的属性,并使用this中的Form1进行分配。

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";
}