花了一天时间,终于解决了这个问题。
winform中,我想在其他form中控制主窗口form中的控件,但是这个控件的定义被写在Form1.Designer.cs文件中,因为我是从界面上拖了一个控件放上去的。在其他form中,要调用这个控件,就会出现“对象引用对于非静态字段、方法或属性是必需的”错误。
手动去Designer.cs文件中加上static关键字是可以的,但是一旦Form更新,static关键字就会被VS编辑器抹去,所以并不是解决问题的最优解。最好的解决方法,其他Form要调用的控件,不要在UI界面显示的放控件上去,反正就是一个panel,应该直接在主窗口代码中动态定义这个控件:
public static Panel panel1 = new Panel();
这样就把这个控件的属性写死了,VS IDE只会改Designer.cs中的内容,不会乱改C#中的代码。下一次编译就不会报错了。