我们如何在单击菜单条项时突出显示活动菜单项?
Posted
技术标签:
【中文标题】我们如何在单击菜单条项时突出显示活动菜单项?【英文标题】:How can we highlight active menu-item on clicking menu strip item? 【发布时间】:2017-09-23 14:43:50 【问题描述】:我正在使用 C# WinForms 开发桌面应用程序。我使用 menustrip 在不同的面板之间导航。我面临的问题是我无法突出显示菜单栏图标的活动颜色。会有图片说明 更好地解释我想要实现的目标。
这是我的菜单条
点击MenuStripItem我想实现这个
简而言之,当我按下 Click 时,我希望菜单条项目保持突出显示,就像 搜索和编辑 在图片中,然后如果我点击 新客户则必须突出显示为搜索和编辑
【问题讨论】:
Change the border color of Winforms menu dropdown list的可能重复 使用ToolStrip
会是更好的选择吗?然后,您可以在ToolStrip
上添加切换按钮,并将与活动面板对应的按钮设置为Checked
【参考方案1】:
您可以改用ToolStrip
并将项目Checked
属性设置为true。为此,您可以处理ToolStrip
的ItemClicked
事件并以这种方式检查项目:
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;
【讨论】:
以上是关于我们如何在单击菜单条项时突出显示活动菜单项?的主要内容,如果未能解决你的问题,请参考以下文章
子菜单链接处于活动状态时突出显示 Wordpress 父菜单项
如何根据活动页面突出显示导航菜单项(具有:: after伪元素)。