如何在点击菜单条项目上突出显示活动菜单项?

时间:2017-09-23 14:43:51

标签: c# .net winforms toolstrip menustrip

我正在使用C#WinForms开发桌面应用程序。我用menustrip在不同的面板之间导航。我面临的问题是我无法突出menustrip图标的活动颜色。图画说明会 更好地解释我想要实现的目标。

这是我的菜单条

enter image description here

点击 MenuStripItem 我想实现此目标

enter image description here

简而言之,当我按 点击 时,我希望菜单条项保持高亮显示,就像 搜索和编辑一样在图片中,之后如果我点击 新客户 然后必须将其突出显示为 搜索&修改

3 个答案:

答案 0 :(得分:2)

您可以改为使用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();

这样,它会将选中的项目显示为突出显示。

答案 1 :(得分:0)

可以在parent上更改所选项目(不确定是否有更合适的事件):

Paint

答案 2 :(得分:0)

按如下所示设置MenuStrip上单击的项目的背景颜色:

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    foreach (ToolStripMenuItem item in ((ToolStrip)sender).Items)
    {
        if (item != e.ClickedItem)
            item.BackColor = Color.White;
        else
            item.BackColor = Color.Cyan;
    }
}