2015-08-31 88 views
8

邊框的顏色是否有可能改變一個工具條菜單下拉列表的邊框顏色。變化的WinForms菜單下拉列表

在我的示例下面我想在下拉菜單中有1種顏色(藍色),而目前正在displated白邊,但保持在主菜單(「我的菜單」)項白色。

任何想法?

enter image description here

+0

你找了這樣一個問題:http://stackoverflow.com/questions/13235627/how-to-change-the-appearance-of-a-menustrip? –

+0

嗯,它可能是重複的。但我仍然不知道要覆蓋哪些屬性才能獲得理想的效果。我試過MenuItemBorder和MenuBorder,但它不會改變。 –

+1

要更改邊框顏色,就足以遵循接受的答案中所述的@Plutonix解決方案。但要刪除項目和菜單邊界之間的白色邊框,請考慮遵循我描述的解決方案之一。 –

回答

10

Is it possible to change the border color of a toolstrip menu dropdown list.

是的。

class MenuColorTable : ProfessionalColorTable 
{ 
    public MenuColorTable() 
    { 
     // see notes 
     base.UseSystemColors = false; 
    } 
    public override System.Drawing.Color MenuBorder 
    { 
     get{return Color.Fuchsia;} 
    } 
    public override System.Drawing.Color MenuItemBorder 
    { 
     get{return Color.DarkViolet;} 
    } 
    public override Color MenuItemSelected 
    { 
     get { return Color.Cornsilk;} 
    } 
    public override Color MenuItemSelectedGradientBegin 
    { 
     get{return Color.LawnGreen;} 
    } 
    public override Color MenuItemSelectedGradientEnd 
    { 
     get { return Color.MediumSeaGreen; } 
    } 
    public override Color MenuStripGradientBegin 
    { 
     get { return Color.AliceBlue; } 
    } 
    public override Color MenuStripGradientEnd 
    { 
     get { return Color.DodgerBlue; } 
    } 
} 

在形式負載:如預期從ProfessionalColorTable作品繼承的類

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

如果視覺樣式未開啓時,並非所有的顏色表項將被使用,其中一些SystemColors會改爲使用。您在Main()使視覺風格:

// must be done before any UI elements are used 
Application.EnableVisualStyles(); 

您可能還禁用系統的顏色如圖所示的構造函數想要的。無論是否啓用視覺樣式,默認值都應該是false,但也許其他東西改變了它?

base.UseSystemColors = false; 

兩個EnableVisualStyles()UseSystemColors = false;必須到位所有在你的顏色表渲染的元素來實現,否則,只有一些正在使用。 (雖然,MenuBorder似乎工作不管。)否則,結果不出所料:

enter image description here

菜單梯度艾莉斯藍去寶藍;一個項目與鼠標放在它使用從LawnGreen到MediumSeaGreen(鼠標未顯示)的頂部到底部梯度。

enter image description here

當打開時,菜單邊框是洋紅色(MMMM,舒緩!)

enter image description here

隨着鼠標的項目之一(未顯示鼠標),該項目使用MenuItemSelected顏色這是Consilk。

如果您在覆蓋層工作時遇到問題,請檢查您是否使用了正確的覆蓋層(或者它們的意思是什麼名稱,最初有些誤導性)。

您可能還會檢查您是否在使用MenuStrip作爲菜單,但Net確實有另一個(舊的)菜單類,但您必須去搜索才能找到它。您也可以更改或禁用任何主題以查看是否可能導致不利影響。

+0

謝謝 - 這是一個很好的答案。任何想法是什麼方法來改變所選菜單項的頂部菜單,而不是下拉菜單項的字體顏色? –

+0

是不是隻是一個標準的屬性? 'menuStrip1.BackColor'只能改變Top/Main菜單文字。如果您想要更改某些更改以模擬發光效果,還有MouseEnter/MouseLeave事件。雖然 – Plutonix

0

我不能讓演示應用程序的權利,但截圖本文 http://www.vbforums.com/showthread.php?596563-100-Customizable-MenuStrip-ToolStrip-StatusStrip-including-common-presets證明我們,邊框顏色的改變是可能的。

那傢伙已經開發了一些庫,但它是基於標準的ToolStrip執行。

我希望這個鏈接會有所幫助。

+0

Tx,不確定我是否缺少某些東西,但這些屏幕截圖中的邊框仍然是白色的(對於下拉菜單)。 –

+0

此窗口:http://i48.tinypic.com/2mzjfva.jpg有深紅色邊框。一些額外的白色邊框是由背景造成的。 –

+0

這就是我所指的額外的白色邊框。在我的屏幕截圖中,我也獲得了不同顏色的背景(根據您的參考屏幕截圖)。但兩者都有那個小小的有趣的白色邊框。 –

0

,您可以給項目切緣陰性,掩蓋了邊界。

6

要更改邊框顏色,就足以遵循接受的答案中描述的Plutonix解決方案。 但要刪除的項和菜單邊框之間的白色邊界,你應當遵循以下解決方案之一:

解決方案1 ​​


您可以通過實現繼承ProfessionalColorTable和壓倒一切的自定義顏色表做正確的屬性。爲此,請按照下列步驟操作:

步驟

  1. 將一個ToolStrip的窗體上添加DropDownButton及其子項到它,子項的設置前景色白色。
  2. 創建CustomColorTable類從ProfessionalColorTable
  3. 覆蓋ImageMarginGradientBegin,ImageMarginGradientMiddle,ImageMarginGradientEnd,ToolStripDropDownBackground繼承並返回您想要的顏色(藍色)。從
  4. 在你的窗體的Load事件設置的ToolStripManager Renderer屬性使用ToolStripProfessionalRenderer那使用您的CustomColorTable。

CustomColorTable代碼

public class CustomColorTable:ProfessionalColorTable 
{ 
    public override Color ImageMarginGradientBegin 
    { 
     get 
     { 
      return Color.MidnightBlue; 
     } 
    } 

    public override Color ImageMarginGradientMiddle 
    { 
     get 
     { 
      return Color.MidnightBlue; 
     } 
    } 

    public override Color ImageMarginGradientEnd 
    { 
     get 
     { 
      return Color.MidnightBlue; 
     } 
    } 

    public override Color ToolStripDropDownBackground 
    { 
     get 
     { 
      return Color.MidnightBlue; 
     } 
    } 
} 

表荷載規範

private void Form_Load(object sender, EventArgs e) 
{ 
    ToolStripManager.Renderer = new ToolStripProfessionalRenderer(new CustomColorTable()); 
} 

截圖

這是正常的截圖

enter image description here

這裏是一個2X放大截圖:

enter image description here

解決方案2


還有一個替代的解決方案,如果你不希望出現這種情況適用在菜單項中使用圖像。在這種情況下,找到DropDown按鈕的DropDown屬性並將其轉換爲ToolStripDropDownMenu,然後將其ShowImageMargin屬性設置爲false並將其BackColor設置爲所需的顏色(藍色)。

private void Form_Load(object sender, EventArgs e) 
{ 
    //The item with text "My Menu" in your sample 
    var dropDownMenu = (ToolStripDropDownMenu)this.myMenuToolStripDropDownButton1.DropDown; 
    dropDownMenu.ShowImageMargin = false; 
    dropDownMenu.BackColor = Color.Navy; 
} 

enter image description here

+0

感謝您的回答,但這可能很乏味。這也是一個很好的答案,但我首先在下面看到了答案,並完成了整個實施。可悲的是我只能接受1個答案。 –