2016-06-06 9 views
0

Я создал инструмент Windows Forms и добавил полосу меню с несколькими элементами и выпадающим меню. Все работает отлично, и когда я выбираю выпадающий пункт меню «Файл», он правильно расширяется. Но когда курсор покидает инструмент полосы меню пункт «Файл» к пунктам меню выпадающее, он меняет свой цвет автоматически белый, так что вы не можете больше читать белый текст:Элемент меню панели инструментов меняет свой цвет сам по себе, когда курсор покидает активированный элемент

Unclicked menu strip

Clicked menu strip with mouse cursor on dropdown items

у меня также был аналогичные проблемы с изменением цвета полосы меню до того, чтобы я уже определил Renderer:

class BlueRenderer : ToolStripProfessionalRenderer 
{ 
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) 
    { 
     if (!e.Item.Selected) 
     { 
      base.OnRenderMenuItemBackground(e); 
      e.Item.BackColor = Color.MediumBlue; 

     } 
     else 
     {     
      Rectangle rc = new Rectangle(Point.Empty, e.Item.Size); 
      e.Graphics.FillRectangle(Brushes.Blue, rc);     
      e.Graphics.DrawRectangle(Pens.MediumBlue, 1, 0, rc.Width - 2, rc.Height - 1);     
      e.Item.BackColor = Color.MediumBlue; 
      base.OnRenderItemBackground(e); 
      e.Item.BackColor = Color.MediumBlue; 
     } 
    } 
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) 
    { 
     base.OnRenderItemText(e); 
     if (!e.Item.Selected) 
     { 
      e.Item.ForeColor = SystemColors.ControlLightLight; 
     } 
     else 
     { 
      e.Item.ForeColor = SystemColors.ControlLightLight; 
     } 
    } 
} 

Я думаю, что я должен изменить еще одно свойство или поведение в рендерер, но я даже не знаю, какой из них и как его изменить. Пожалуйста, помогите мне просто сохранить цвет деталя в синем/среднем синем, когда курсор мыши покинет этот элемент.

Приветствие

Florian

ответ

0

Найдено решение, пытаясь несколько вариантов рендерер из: Я удалил свой бывший "BlueRenderer" и определил ProfessionalColorTable вместо:

public class ownColorTable : System.Windows.Forms.ProfessionalColorTable 
{ 
    public override Color MenuItemPressedGradientBegin 
    { 
     get 
     { 
      return Color.Blue; 
     } 
    } 

    public override Color MenuItemPressedGradientEnd 
    { 
     get 
     { 
      return Color.Blue; 
     } 
    } 

Тогда я initalized ToolStripProfessionalRenderer следующим образом:

menuStrip1.Renderer = new ToolStripProfessionalRenderer(new ownColorTable());