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

本文关键字:静态 字段 访问 静态函数 | 更新日期: 2023-09-27 18:18:19

我有两个表单。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。文本

在这种情况下,你有什么建议吗?我想添加更多的Form2到Form1当我得到这个工作

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

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