为什么我不能以这种方式更改表单的背景颜色?
MainForm.BackColor = System.Drawing.Color.Black;
这是我在控制台中获得的内容:
An object reference is required for the non-static field, method, or property 'System.Windows.Forms.Control.BackColor.get' (CS0120)
答案 0 :(得分:3)
您正在使用MainForm,就像它是一个静态类一样。要么使表单静态,要么创建它的实例。
MainForm form = new MainForm();
然后使用
form.BackColor = Color.Black;
添加到您的问题的评论,坚持
this.BackColor = Color.Black;
在表单的方法内部,只需调用该方法即可。像这样。
void changeBackColor(Color color)
{
this.BackColor = color;
}
这样可以将颜色传递给方法并相应地更改BackColor。
希望这会有所帮助。我建议你读一本关于C#的书。初始化之前无法使用对象。这是一个非常基本的概念。
答案 1 :(得分:2)
Static Classes是无法实例化的类。静态类具有静态方法或静态属性(或两者)。当您使用这样的行时:
MainForm.BackColor = System.Drawing.Color.Black; // <class name>.<property>
C#编译器首先要做的是查找名为MainForm
的本地类变量。由于没有,因此它会在您的本地范围之外查找并找到名为Windows.Form
的{{1}}类。
然后查看类MainForm
是否具有名为MainForm
的静态属性。编译器然后说“哦,看,有一个名为BackColor
的属性,但它不是静态的”,这是编译器抱怨并把你遇到的错误扔给你的。
通过将其更改为BackColor
,编译器知道您要设置MainForm的此实例的背景颜色,this.BackColor
或默认为this
:
form1
作为旁注,不需要关键字this.BackColor = System.Drawing.Color.Black; // <this instance>.<property>
。省略它假设“这个对象”。你也可以这样做:
this
希望这更有意义!