【问题标题】:How can we highlight active menu-item on clicking menu strip item?我们如何在单击菜单条项时突出显示活动菜单项?
【发布时间】:2017-09-23 14:43:50
【问题描述】:

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

这是我的菜单条

点击MenuStripItem我想实现这个

简而言之,当我按下 Click 时,我希望菜单条项目保持突出显示,就像 搜索和编辑 在图片中,然后如果我点击 新客户则必须突出显示为搜索和编辑

【问题讨论】:

标签: c# .net winforms toolstrip menustrip


【解决方案1】:

您可以改用ToolStrip 并将项目Checked 属性设置为true。为此,您可以处理ToolStripItemClicked 事件并以这种方式检查项目:

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();

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

【讨论】:

  • 谢谢你,这对我帮助很大。最好使用工具条而不是菜单条。谢谢
【解决方案2】:

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

public Form1()
{
    InitializeComponent();

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

【讨论】:

    【解决方案3】:

    在 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2014-10-08
      相关资源
      最近更新 更多