Winform中一个类(窗体)中如何调用另一个窗体的控件或方法

2)窗体A和窗体B之间的调用 ,比较简单
例如:Form1和Form2分别为两个winform窗体,若想在窗体1中调用窗体2的控件,直接这样就行,如下:

Form2.Button;(当然这个button一定是窗体2中所拥有的,设置为public就行)


2)一个类中调用窗体中的控件,这种比较复杂

比如现需要从 类A中调用窗体B中的控件(类A假定为Class A; 窗体B假定为Class Form)

我有尝试直接在要调用的类中直接这么做:

Class form=new Form();

然后通过窗体类的实例去调用,这种做法表面上看是没有问题的,但实际会有不同的隐含问题:如会出现"C# 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke";

可能还会出现该类中调用窗体内的控件并不能在该窗体中得到有效显示,这个问题暂时不知道叫啥专业名,但是我理解就是新new出的实例类并不完全和Form一致,是两个不同的继承Form窗体的实例,以至于不能同步,具体细节没深究了

因此通过查找资料,这样做可以避免:

即第一步先在被调用的窗体类中定义静态变量,构造方法中引用这个Form

  public static Form form;

  同时在该窗体类的构造方法中加这一行
  即Form类下定义静态变量,构造方法中引用这个form

  public Form(){

    form=this; //相当于该窗体类的实例赋给了该静态变量form

  }

  在Class A中调用该窗体的控件或方法,只需如下就可以保证你调用的实例是该窗体类的实例

    Form.form.Button;

    Form.form.Method();

原文地址:https://www.cnblogs.com/rhp2lmy1314/p/14509661.html