如何重置默认按钮BackColor?

50

我曾尝试使用不同的选项更改按钮背景颜色,结果改变了外观类别中的BackColor属性。然后我将其更改回默认值Control,但它仍与其他按钮不同:

屏幕截图显示了不同颜色的按钮

我已尝试构建项目并重新启动Visual Studio,但这没有帮助。

我知道我可以拖动另一个按钮并复制/粘贴代码,但是首先是什么原因导致这种情况,以及如何正确修复它?


如果在设计模式下进行更改,则只需转到[背景颜色]属性(在设计模式下)并右键单击。您将获得一个菜单,以恢复默认设置。 - Michael Z.
11个回答

85
BackColor 属性默认是环境属性,意味着它继承其父控件的值。当您将其显式设置为特定值时,它会覆盖环境属性并强制使用该特定值。
标准的 Windows 按钮控件不支持自定义颜色,因此 WinForms 实际上会自定义绘制控件以允许设计人员覆盖其颜色。这样,如果您想要一个丑陋的绿色或红色按钮,就可以做到这一点。
这里发生的情况是你有效地为按钮控件设置了自定义背景颜色(你将其设置为 3D 控件的背景颜色,但它也可以很容易地是紫色),这迫使 WinForms 自定义绘制控件并用指定的颜色绘制其背景。这就是给它带来 "平面" 外观的原因——背景颜色现在是用单一的自定义颜色绘制的,而不是使用默认的渐变效果。在 Windows 经典主题下可能不太明显,因为按钮实际上是用平面 3D 控件颜色绘制的。但 Aero 添加了渐变和其他 "热门" 效果,这使得这个问题突出得像个大拇指头。
要清除您设置的值并恢复属性的环境状态,您可以在"属性"窗口中右键单击该属性,然后选择 "重置"。您也可以通过将属性设置为 default(Color) 来通过代码实现。
myButton.BackColor = default(Color);

你还需要将 UseVisualStyleBackColor 属性重新设置为 true,因为每当更改 BackColor 属性以支持自定义背景颜色时,它会自动设置为 false

或者,你可以告诉 WinForms 完全忽略这样的自定义属性,并要求 Windows 绘制按钮控件。这可以通过将 FlatStyle 属性设置为 FlatStyle.System 来实现。

同样,这可以在设计器中或通过代码完成。这不仅可以防止你改变背景颜色等无聊的事情,从而创建丑陋的控件,而且还可以将 Win32 按钮控件的本机行为恢复到你的 WinForms 应用程序中,包括悬停时的微妙 Aero 渐隐效果。

我不知道为什么这不是默认设置。你应该需要特别请求才能获得丑陋和非标准的控件。那不应该自动发生。我只能假设这是 VB 6 程序员的让步,他们多年来一直可以制作各种丑陋的控件。


1
default(Color) 的 VB.NET 版本是什么? - Peter Mortensen
2
现在,你也可以调用方法 button1.ResetBackColor(),但你仍然需要设置 button1.UseVisualStyleBackColor = true - Anlo

13

当您更改默认的背景颜色时,它会将UseVisualStyleBackColor属性翻转为false。

只需将其更改为true,您就可以完成设置!


13

要恢复按钮的默认背景颜色,请使用以下方法:

Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True

2
使用 UseVisualStyleBackColor = true 就足以让它工作了。 - Sebastian Ax
这个对我也起作用了。我同意@Sebastian Ax的观点,只使用UseVisualStyleBackColor = true;就足够了。 - Eyal Gerber

5

要将按钮的默认背景和前景恢复为原样,请使用以下代码:

Button1.BackColor = SystemColors.ButtonFace;
Button1.ForeColor = default(Color);
Button1.UseVisualStyleBackColor = true;

'SystemColors' 不包含 'ButtonFace' 的定义。 - Paul McCarthy
你在使用记事本进行编程吗? - Ady
真正的程序员使用vi :-) - Paul McCarthy

4

我的经验:

CommandButton1.BackColor = vbButtonFace

3
Button1.BackColor = Color.FromKnownColor(KnownColor.Control)

使用 FromKnowColor 访问系统颜色,非常简单。

2
Button1.BackColor = Color.Gainsboro

2
通常情况下,如果答案包含代码的意图和解决问题的原因,而不会引入其他问题,那么这些答案会更有帮助。 - Tim Diekmann
1
很好,这个评论对于重置默认颜色按钮非常有帮助。 - anhvietcr

1
请使用这个。
myButton.BackColor = default(Color);

1
在Winforms中,默认颜色是Control。您可以从VS的属性窗格中进行设置。
属性名称是BackColor,您想要的颜色在System Colors -> Control中。

0
tmpButtonCtrl.BackColor = DefaultBackColor
tmpButtonCtrl.ForeColor = DefaultForeColor
tmpButtonCtrl.UseVisualStyleBackColor = True

.NET框架4.5
VB.Net视觉工作室2013


1
请编辑您的答案,添加更多说明,您也可以将代码放在缩进中,这样会使其看起来更漂亮。 - Yonlif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接