禁用按钮上的实际文本颜色

时间:2016-06-02 15:46:03

标签: vb.net button colors disabled-control

VB2012:我正在创建一个按钮控件并继承.NET按钮。从这里开始基础https://blogs.msdn.microsoft.com/jfoscoding/2005/11/10/building-a-splitbutton/由于我重新绘制了按钮,我必须在禁用时引入一些代码来更改按钮文本。

因此,根据过去的经验,我立即使用SystemColors.GrayText。但是将它与普通的.NET按钮进行比较,禁用时的颜色似乎有些偏差。在进行实验后,非常接近的是SystemColors.ControlDark。我无法在任何地方找到这个记录。我这样做是无比的吗?

2 个答案:

答案 0 :(得分:0)

在编写了一个非常笨重的像素偷窥程序后,似乎前景色为160,160,160,背景色为204,204,204。 Windows ClearType字体平滑使事情变得有点困难,生活从来都不简单呃?

所以你需要设置类似这样的颜色

    Me.ForeColor = Color.FromArgb(160, 160, 160)
    Me.BackColor = Color.FromArgb(204, 204, 204)

或者至少那是他们在我的Windows 10电脑上的标准主题。

答案 1 :(得分:0)

对于这样的事情,Reference Source是你的朋友。如果您通过调用,您将看到System.Windows.Forms.Button类最终调用ButtonBaseAdapter.DrawText方法来执行按钮上文本的实际绘制。调用堆栈如下所示:

  • System.Windows.Forms.ButtonBase.OnPaint
  • System.Windows.Forms.ButtonBase.PaintControl
    • PaintControl方法调用Adapter.PaintAdapter是一个返回当前按钮绘图适配器的属性。它返回的适配器取决于样式(即平面,弹出,标准)。如果它是标准样式按钮,则会调用返回Button.CreateStandardAdapter的{​​{1}}方法,以便ButtonStandardAdapter方法使用该方法。 PaintControl方法是由它的基类实现的,所以它是被调用的方法。
  • ButtonStandardAdapter.Paint
  • System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.Paint
  • System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintUp
  • System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintWorker
  • System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.PaintField

System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.DrawText方法中,您会看到它会像这样绘制禁用的文字:

DrawText

首先,它使用if (disabledText3D && !Control.Enabled) { r.Offset(1, 1); using (SolidBrush brush = new SolidBrush(colors.highlight)) { g.DrawString(Control.Text, Control.Font, brush, r, stringFormat); r.Offset(-1, -1); brush.Color = colors.buttonShadow; g.DrawString(Control.Text, Control.Font, brush, r, stringFormat); } } 绘制偏移(1, 1)的文本,然后再次绘制它,但这次使用colors.highlight偏移(-1, -1)colors.buttonShadow变量是对colors对象的引用。如果您按照代码操作,则会看到ColorData方法正在创建ColorData。它返回的颜色取决于某些系统设置,例如正常模式和高对比度模式。但是,对于标准情况,它看起来像它返回的颜色是:

System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.ColorOptions.Calculate