【问题标题】:How to access non static method of form1 from form2 [duplicate]如何从form2访问form1的非静态方法[重复]
【发布时间】:2015-10-30 18:12:38
【问题描述】:

我想在 form2 中点击按钮时在 form1 中调用函数 update。 update 方法将对 form1 中的控件进行更改。我正在使用这种方法,但是当我访问它时,它不会提供访问权限(当方法是非静态时),当我将方法设为静态时,它会要求将控件也设为静态,而我不想这样做。有没有其他办法?

public button1_click()
{

Form1.update();

}

// method in form1

public static void update()
{

 control.Text="ab";

}

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您不能在静态方法中访问非静态变量。参考documentation

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

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

    在这种情况下,如果您的update 方法(顺便说一句应该是Update)需要访问您的类的非静态成员,您应该将其设为非静态,并将Form2 更改如下:

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

    private Form1 form1;
    
    public Form2(Form1 form1)
    {
        this.form1 = form1;
    }
    

    2) 从form1 创建form2 时,传递其实例:

    Form2 form2 = new Form2(this); // when in Form1
    

    如果您在其他上下文中创建 Form2,您需要(类似地)手头有 form1 实例并调用:

    Form2 form2 = new Form2(form1);
    

    3) 更改事件处理程序以处理 Form1 的特定实例:

    public button1_click()
    {
        this.form1.update();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多