44

我正在尝试按钮背景颜色的不同选项,并最终更改BackColor了外观类别中的属性。然后我将它改回默认状态,即Control,但它看起来仍然与其他按钮不同:

按钮截图

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

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

4

11 回答 11

77

默认情况下,该BackColor属性是环境属性,这意味着它从其父控件继承其值。当您将其显式设置为特定值时,它会覆盖环境性质并强制它使用该特定值。

标准的 Windows 按钮控件不支持自定义颜色,因此 WinForms 实际上会自定义绘制控件以允许设计者覆盖其颜色。这样,如果你想要一个丑陋的绿色或红色按钮,你可以这样做。

这里发生的情况是您已经为按钮控件有效地设置了自定义背景颜色(您将其设置为 3D 控件的背景颜色,但它也可以很容易地设置为紫色),这迫使 WinForms 自定义绘制控件并用您指定的颜色绘制其背景。这就是赋予它“平坦”外观的原因 - 背景颜色现在使用单一自定义颜色绘制,而不是使用默认的渐变效果。在 Windows Classic(Aero 之前)主题下,它不会那么明显,因为按钮实际上用平面 3D 控制颜色绘制的。但是 Aero 添加了渐变和其他“热”效果,这使得它像拇指酸痛一样突出。

要清除您设置的值并恢复属性的环境特性,您可以在“属性”窗口中右键单击该属性,然后选择“重置”。您也可以通过代码将属性设置为default(Color)

myButton.BackColor = default(Color);

您还需要将UseVisualStyleBackColor属性设置回,每当更改属性以支持自定义背景颜色时true,它都会自动设置为。falseBackColor

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

同样,这可以在设计器中或通过代码完成。这不仅可以防止您更改背景颜色等愚蠢的东西,创建一个丑陋的控件,而且还可以将 Win32 按钮控件的本机行为恢复到您的 WinForms 应用程序,包括悬停时微妙的 Aero 淡入淡出效果。

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

于 2012-05-13T04:03:33.550 回答
13

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

只需将其更改回 true,您就应该设置好了!

于 2012-05-13T04:09:32.233 回答
11

要恢复按钮的默认背景颜色,请使用;

Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True
于 2014-08-21T06:00:49.733 回答
4

什么对我有用:

CommandButton1.BackColor = vbButtonFace
于 2015-05-01T13:43:01.353 回答
4

要将默认背景和前景恢复为按钮,请使用:

Button1.BackColor = SystemColors.ButtonFace;
Button1.ForeColor = default(Color);
Button1.UseVisualStyleBackColor = true;
于 2018-02-18T19:23:00.013 回答
3
Button1.BackColor = Color.FromKnownColor(KnownColor.Control)

使用FromKnowColor访问系统颜色。真的就是这么简单。

于 2016-10-28T17:58:24.517 回答
2
Button1.BackColor = Color.Gainsboro
于 2018-05-22T21:42:04.287 回答
1

**请使用这个**

myButton.BackColor = default(Color);
于 2019-04-03T12:49:23.790 回答
0

参考您的问题标题“如何重置为默认按钮背景颜色?” ,我通过以下方式解决了我的问题:

创建另一个按钮,比如说ButtonFoo,并将其设置为不可见,

ButtonFoo.visible = False

您可以使用此按钮获取其颜色(因为它是默认颜色)以重置您的另一个按钮颜色,例如,

ButtonChangedColor.BackColor = ButtonFoo.BackColor

你去吧;颜色恢复为默认值:)

于 2014-05-20T03:19:56.203 回答
0

在 Winforms 中,默认颜色是 Control。您可以从 VS 的属性窗格中设置它。

PropertyName 是 BackColor 并且您想要的颜色在 System Colors -> Control

于 2018-04-25T11:46:39.110 回答
0
tmpButtonCtrl.BackColor = DefaultBackColor
tmpButtonCtrl.ForeColor = DefaultForeColor
tmpButtonCtrl.UseVisualStyleBackColor = True

.NET 框架 4.5
VB.Net Visual Studio 2013

于 2019-06-12T20:48:11.933 回答