2014-10-28 69 views
1

我有一個包含大量菜單項的應用程序。我已將菜單項的背景更改爲深灰色,並將文本更改爲白色,但文本附近的箭頭仍爲黑色。我想改變這個箭頭的顏色爲白色。更改c中菜單項附近箭頭的顏色#

我發現本文中的exlanation:

MenuItem.OwnerDraw Property

和計算器一個類似的問題:

Question on stackoverflow

它有可能改變旁邊的箭頭的顏色菜單以更簡單的方式? (這是允許您顯示子菜單的箭頭)。我的意思是使用像ProfessionalColorTable的東西。

+1

不,你需要自己 – Vajura 2014-10-28 10:01:23

回答

2

靈感是這very good answer@Hans Passantenter image description here 提供自定義渲染的形式負載或構造喜歡你的菜單條:

this.menuStrip.Renderer = new WhiteArrowRenderer(); 

並覆蓋箭頭漆:

public class WhiteArrowRenderer : ToolStripProfessionalRenderer { 
    protected override void OnRenderArrow (ToolStripArrowRenderEventArgs e) { 
     var tsMenuItem = e.Item as ToolStripMenuItem; 
     if (tsMenuItem != null) 
      e.ArrowColor = Color.White; 
     base.OnRenderArrow(e); 
    } 
} 
+0

繪製菜單這是非常有用的。我試了一下,它的工作原理。 不幸的是,這個解決方案刪除了​​我所做的另一個更改。我用這段代碼覆蓋了一些方法來改變一些顏色:ToolStripProfessionalRenderer toolStripProfessionalRenderer = new ToolStripProfessionalRenderer(new MyColorTable()); ToolStripManager.Renderer = toolStripProfessionalRenderer;隨着新的代碼我失去了舊的變化。我該如何解決這個問題?非常感謝 – MartinaLabMath 2014-10-28 12:10:53

+0

將現有的顏色表合併到可以處理箭頭的自定義渲染器中。 – 2014-10-28 12:20:15

+0

你是什麼意思?我試過這樣做:CustomToolStripRenderer customRenderer = new ustomToolStripRenderer(new ToolStripProfessionalRenderer(new MyColorTable())); customRenderer.Render(); public void Render(){ ToolStripManager.Renderer = _toolStripRenderer; } protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e){var tsMenuItem = e.Item as ToolStripMenuItem; if(tsMenuItem!= null)e.ArrowColor = Color.White; base.OnRenderArrow(e);}以這種方式,箭頭仍然是黑色的,因爲使用ToolStripManager.Renderer = _toolStripRenderer我重寫渲染器。 – MartinaLabMath 2014-10-28 15:44:55