2012-04-07 1 views
1

Я использую ToolStripDropDownButton с ForeColor является белым и BACKCOLOR является прозрачным. Текст «ToolStripDropDownButton» нечитабелен, если мышь находится над элементом управления, потому что отображается «синий фокус».Как устранить синий фокус на ToolStripDropDownButton, когда мышь находится над управлением

Как устранить/удалить «синий фокус» на ToolStripDropDownButton, когда мышь находится над контролем? Похож на рисунок ниже. Спасибо.

enter image description here Которая производит выходные данные, такие как digEmВсе изображение.

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); 
      } 
     } 
    } 
} 

ответ

1

Вы можете изменить свойство Renderer для 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

+0

Я пробовал вашу программу, выход выглядит как ваша фотография, но имеет белую линию под кнопкой, как скрыть белую линию, спасибо. –

+0

@ user705654: Я не понимал, что вы хотите полностью стереть любую подсветку кнопок. Чтобы сделать это, взгляните на ответ Ханса Пассанта;) – digEmAll

+0

Я хочу, чтобы результат был как ваша фотография, но после запуска вашей программы, которая производит выходные данные, как это http://i43.tinypic.com/2i9pjww.jpg. Как скрыть белую строку под кнопкой. –

3

Вы можете переназначить свойство Renderer для ToolStrip, чтобы создать свой собственный визуализатор. Переопределение OnRenderSplitButtonBackground(), однако, очень болезненно, кнопка разделения имеет много doodahs, которые должны быть окрашены, а методы макетирования являются частными. Более простой подход в вашем случае - переопределить таблицу цветов. Сделайте это так:

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; } 
     } 
    } 
} 
+0

Ваш код так работает, спасибо за помощь. –

Смежные вопросы