当鼠标位于控件之上时,如何消除ToolStripDropDownButton上的蓝色焦点

时间:2012-04-07 10:57:36

标签: c# focus mouse toolstripdropdown

我使用 ToolStripDropDownButton Forecolor 白色 Backcolor trasparent 。当鼠标位于控件上方时,“ToolStripDropDownButton”的文本无法读取,因为“蓝色焦点”可见。

当鼠标位于控件之上时,如何消除/删除 ToolStripDropDownButton 上的“蓝色焦点”?如下图所示。谢谢。

enter image description here 这产生了像digEmAll图片的输出。

using System;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApplication1
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();

           toolStrip1.BackColor = Color.Transparent;
           toolStrip1.GripStyle = ToolStripGripStyle.Visible;
           toolStrip1.Renderer = new MyRenderer();
       }

       private class MyRenderer : ToolStripSystemRenderer
       {
          protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
          {
              e.ArrowColor = Color.White;
              base.OnRenderArrow(e);
          }

          protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
          {
             // remove white line bellow button (http://connect.microsoft.com/VisualStudio/feedback/details/92862/toolstrip-always-draws-a-border-on-the-bottom-with-rendermode-system-and-docked-left-or-right)
             //base.OnRenderToolStripBorder(e);
          }
       }
    }
}

2 个答案:

答案 0 :(得分:3)

您可以为ToolStrip重新指定Renderer属性以创建自己的渲染器。然而,重写OnRenderSplitButtonBackground()是非常痛苦的,分割按钮有很多需要绘制的doodahs,而stock painter方法是私有的。在您的情况下,更简单的方法是覆盖颜色表。看起来像这样:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        toolStrip1.Renderer = new MyRenderer();
    }

    private class MyRenderer : ToolStripProfessionalRenderer {
        public MyRenderer() : base(new MyColors()) {}
    }

    private class MyColors : ProfessionalColorTable {
        public override Color ButtonSelectedGradientBegin {
            get { return Color.Black; }
        }
        public override Color ButtonSelectedGradientMiddle {
            get { return Color.Black; }
        }
        public override Color ButtonSelectedGradientEnd {
            get { return Color.Black; }
        }
    }
}

答案 1 :(得分:2)

您可以更改ToolStrip的渲染器属性。例如,使用ToolStripSystemRenderer代替默认ToolStripProfessionalRenderer

this.toolStrip.Renderer = new ToolStripSystemRenderer();

您将获得以下结果:

enter image description here

如果要更加自定义它,可以扩展ToolStripSystemRenderer。例如,使用以下代码,您可以更改箭头的颜色:

class MyRenderer : ToolStripSystemRenderer
{
    protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
    {
        e.ArrowColor = Color.White;
        base.OnRenderArrow(e);
    }
}

结果:

enter image description here