2017-09-23 105 views
2

我正在使用C#WinForms的桌面應用程序。我用菜單欄在不同的面板之間導航。我面臨的問題是我無法突出顯示菜單欄圖標的活動顏色。圖示說明 將更好地解釋我想要的功能。我們如何突出顯示點擊菜單條上的活動菜單項?

這是我的菜單條

enter image description here

和點擊MenuStripItem我想要實現這個

enter image description here

總之我要在菜單條項保留高亮當我按點擊就可以了,就像搜索和編輯在畫面和事後如果我在 新客戶點擊那麼它必須被強調爲搜索&編輯

+1

[變化的WinForms菜單下拉列表邊框的顏色(HTTPS的可能的複製。 com/questions/32307778/change-the-border-color-of-winforms-menu-dropdown-list) – Plutonix

+0

使用'ToolStrip'會更好嗎?然後,您可以將切換按鈕添加到「ToolStrip」,並將與活動面板相對應的按鈕設置爲「已檢查」。 – erdomke

回答

1

您可以使用ToolStrip代替並將項目Checked屬性設置爲true。要做到這一點,你可以處理ItemClicked事件的ToolStrip和檢查項目是這樣的:

private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
{ 
    foreach (ToolStripButton item in ((ToolStrip)sender).Items) 
    { 
     if (item != e.ClickedItem) 
      item.Checked = false; 
     else 
      item.Checked = true; 
    } 
} 

這樣,它顯示了一個邊框檢查項目。如果您有任何理由不與外觀滿意,你可以簡單地創建自定義渲染器,併爲ToolStrip的渲染器分配給它這種方式定製檢查項目的外觀:

public class MyRenderer : ToolStripProfessionalRenderer 
{ 
    public MyRenderer() : base(new MyColorTable()) 
    { 
    } 
} 

public class MyColorTable : ProfessionalColorTable 
{ 
    public override Color ButtonCheckedGradientBegin 
    { 
     get { return ButtonPressedGradientBegin; } 
    } 
    public override Color ButtonCheckedGradientEnd 
    { 
     get { return ButtonPressedGradientEnd; } 
    } 
    public override Color ButtonCheckedGradientMiddle 
    { 
     get { return ButtonPressedGradientMiddle; } 
    } 
} 

而且在Load事件指派渲染在你的表單的構造函數中這樣初始化組件之後:

toolStrip1.Renderer = new MyRenderer(); 

這樣,它顯示選中的項目爲突出顯示。

+0

謝謝你,他幫了我很多。最好使用toolstrip而不是menustrip。謝謝 – Ezaz

0

選定的項目可以在Paint改變(不知道是否有更合適的事件)://計算器:

public Form1() 
{ 
    InitializeComponent(); 

    ToolStripItem activeToolStripItem = null; 
    menuStrip1.Paint += (o, e) => activeToolStripItem?.Select(); 
    menuStrip1.ItemClicked += (o, e) => activeToolStripItem = e.ClickedItem; 
}