如何从form2访问form1的非静态方法

时间:2015-10-30 09:48:56

标签: c# winforms

我想在form2中调用函数update,即使是form2中的按钮也是如此。 update方法将更改form1中的控件。我正在使用这种方法,但是当我访问它时不提供访问权限(当方法是非静态的)时,当我使方法静态时,它要求使控件保持静态,这是我不想要的。还有其他办法吗?

public button1_click()
{

Form1.update();

}

// method in form1

public static void update()
{

 control.Text="ab";

}

1 个答案:

答案 0 :(得分:4)

您无法在静态方法中访问非静态变量。请参阅documentation

  

虽然类的实例包含该类的所有实例字段的单独副本,但每个静态字段只有一个副本。

     

无法使用它来引用静态方法或属性访问器。

在这种情况下,如果您的update方法(BTW应为Update)需要访问您班级的非静态成员,则应将其设为非静态成员,并更改{{1如下:

1)添加一个字段并更改表单的构造函数以接受Form2实例作为参数:

Form1

2)从private Form1 form1; public Form2(Form1 form1) { this.form1 = form1; } 创建form2时,传递其实例:

form1

如果您在其他某个环境中创建Form2 form2 = new Form2(this); // when in Form1 ,则需要(类似地)拥有Form2个实例并致电:

form1

3)更改事件处理程序以处理Form2 form2 = new Form2(form1); 的特定实例:

Form1