如何在运行时修改System.Windows.Forms.UserControl的BackColor属性?
如何修改自定义UserControl的背景色?
我已经能在运行时修改Label等控件的背景色、文本颜色,但尝试修改主UserControl(下图选中的控件)的颜色时出现错误:
property or indexer
control.DefaultBackColorcannot be assigned to -- it is read-only
UPDATE-1: 图中仅用于示意我要修改BackColor,但当我使用代码InfoBox.BackColor = System.Drawing.Color.FromArgb(255, 214, 164, 143);时,又出现另一个错误:
an object reference is required to access non-static member
请问该如何修改它的颜色?
嘿,咱们拆解这两个问题来解决:
1. 关于DefaultBackColor只读的问题
DefaultBackColor是控件的默认背景色属性,它的设计就是只读的,用来存储控件的初始默认颜色值,你没法直接给它赋值。真正用来修改控件显示背景色的是BackColor属性,别搞错对象啦~
2. 关于“需要对象引用访问非静态成员”的问题
这个报错的核心原因是你用错了访问方式:
- 如果你写的
InfoBox是你的UserControl的类名,那直接通过类名访问BackColor肯定不行——因为BackColor是非静态属性,必须通过类的实例对象来调用。 - 举个例子:如果你的窗体上已经拖放了一个
InfoBox的实例,它的Name属性是infoBox1,那正确的代码应该是:infoBox1.BackColor = System.Drawing.Color.FromArgb(255, 214, 164, 143); - 要是你是在
InfoBox这个控件的内部代码里修改自身的背景色,那直接用this指代当前实例就行:this.BackColor = System.Drawing.Color.FromArgb(255, 214, 164, 143);
额外提醒
如果修改完BackColor还是看不到效果,你得检查一下UserControl内部有没有覆盖整个区域的控件(比如占满空间的Panel),要是有的话,把内部控件的BackColor设为Transparent,这样UserControl的背景色才能显示出来。
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

