我们如何突出显示点击菜单条上的活动菜单项?

问题描述:

我正在使用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

您可以使用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

选定的项目可以在Paint改变(不知道是否有更合适的事件)://计算器:

public Form1() 
{ 
    InitializeComponent(); 

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