我正在尝试使用按钮背景颜色的不同选项,最后更改了“外观”类别中的BackColor
属性。然后我将其更改为默认情况下的Control
,但它仍然与其他按钮不同:
我已经尝试构建项目并重新启动Visual Studio,但它没有帮助。
我知道我可以拖动另一个按钮并复制/粘贴代码,但是首先导致这种情况的原因是什么?如何正确修复它?
答案 0 :(得分:65)
BackColor
属性默认为环境属性,这意味着它从其父控件继承其值。当您将显式设置为特定值时,它会覆盖环境特性并强制它使用该特定值。
标准的Windows按钮控件不支持自定义颜色,因此WinForms实际上会自定义绘制控件以允许设计者覆盖其颜色。这样,如果你想要一个丑陋的绿色或红色按钮,你就可以做到。
这里发生的事情是你为按钮控件有效地设置了自定义背景颜色(你将它设置为3D控件的背景颜色,但它可能很容易变成紫色),这就迫使WinForms自定义绘制控件并使用指定的颜色绘制其背景。这就是赋予它“平坦”外观的原因 - 背景颜色现在用一种自定义颜色绘制,而不是使用默认的渐变效果。在Windows Classic(pre-Aero)主题下它不会那么引人注目,因为实际的按钮用平面3D控件颜色绘制。但是Aero增加了渐变和其他“热”效果,这使得它像拇指一样伸出来。
要清除您设置的值并恢复属性的环境特性,可以在属性窗口中右键单击属性,然后选择“重置”。您也可以通过将属性设置为default(Color)
:
myButton.BackColor = default(Color);
您还需要将UseVisualStyleBackColor
属性设置回true
,只要更改false
属性以支持自定义背景颜色,该属性就会自动设置为BackColor
或者,您可以告诉WinForms完全忽略这样的自定义属性,并要求Windows绘制按钮控件。通过将FlatStyle
属性设置为FlatStyle.System
来执行此操作。
同样,这可以在设计师或通过代码完成。这不仅会阻止你改变背景颜色等愚蠢的东西,创建一个可怕的丑陋控件,而且它还会将Win32按钮控件的原生行为恢复到你的WinForms应用程序,包括悬停时微妙的Aero淡入淡出效果。
我不知道为什么这不是默认值。你应该特别要求获得丑陋和非标准的控件。这不应该只是自动发生。我只能假设这是对VB 6程序员的让步,他们多年来一直能够制作各种丑陋的控件。
答案 1 :(得分:13)
更改默认背景颜色时,会将UseVisualStyleBackColor
属性翻转为false。
只需将其更改为true即可设置!
答案 2 :(得分:9)
要恢复按钮的默认背景颜色,请使用;
Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True
答案 3 :(得分:3)
对我有用的是什么:
CommandButton1.BackColor = vbButtonFace
答案 4 :(得分:3)
npm run test
使用Button1.BackColor = Color.FromKnownColor(KnownColor.Control)
访问系统颜色。
这真的很简单。
答案 5 :(得分:3)
要将默认背景和前景恢复为按钮,请使用:
Button1.BackColor = SystemColors.ButtonFace;
Button1.ForeColor = default(Color);
Button1.UseVisualStyleBackColor = true;
答案 6 :(得分:1)
Button1.BackColor = Color.Gainsboro
答案 7 :(得分:0)
参考你的问题标题,"如何重置为默认按钮BackColor?" ,我通过以下方式解决了我的问题:
创建另一个按钮,例如ButtonFoo
,并将其设置为不可见
ButtonFoo.visible = False
您可以使用此按钮获取其颜色(因为它是默认颜色)以重置其他按钮颜色,例如,
ButtonChangedColor.BackColor = ButtonFoo.BackColor
你走了;颜色恢复为默认值:)
答案 8 :(得分:0)
在Winforms中,默认颜色为Control。您可以在VS中的“属性”窗格中进行设置。
PropertyName是BackColor,您想要的颜色是系统颜色 - >控制
答案 9 :(得分:0)
**请使用此内容**
myButton.BackColor = default(Color);
答案 10 :(得分:0)
tmpButtonCtrl.BackColor = DefaultBackColor
tmpButtonCtrl.ForeColor = DefaultForeColor
tmpButtonCtrl.UseVisualStyleBackColor = True
.NET Framework 4.5
VB.Net Visual Studio 2013