我们如何在单击菜单条项目时突出显示活动菜单项?
How can we highlight active menu-item on clicking menu strip item?
我正在使用 C# WinForms 开发桌面应用程序。我使用 menustrip 在不同的面板之间导航。我面临的问题是我无法突出显示菜单条图标的活动颜色。图片描述将
更好地解释我想要实现的目标。
这是我的菜单条
然后单击 MenuStripItem 我想实现这个
简而言之,我希望菜单条项目在我按下 时保持突出显示,就像 一样单击 在图片中搜索并编辑 然后如果我点击
New Customers 那么它必须突出显示为 Search & Edit
您可以改用 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();
这样,选中的项目就会突出显示。
可以在 Paint
更改所选项目(不确定是否有更合适的事件):
public Form1()
{
InitializeComponent();
ToolStripItem activeToolStripItem = null;
menuStrip1.Paint += (o, e) => activeToolStripItem?.Select();
menuStrip1.ItemClicked += (o, e) => activeToolStripItem = e.ClickedItem;
}
设置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;
}
}
我正在使用 C# WinForms 开发桌面应用程序。我使用 menustrip 在不同的面板之间导航。我面临的问题是我无法突出显示菜单条图标的活动颜色。图片描述将 更好地解释我想要实现的目标。
这是我的菜单条
然后单击 MenuStripItem 我想实现这个
简而言之,我希望菜单条项目在我按下 时保持突出显示,就像 一样单击 在图片中搜索并编辑 然后如果我点击 New Customers 那么它必须突出显示为 Search & Edit
您可以改用 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();
这样,选中的项目就会突出显示。
可以在 Paint
更改所选项目(不确定是否有更合适的事件):
public Form1()
{
InitializeComponent();
ToolStripItem activeToolStripItem = null;
menuStrip1.Paint += (o, e) => activeToolStripItem?.Select();
menuStrip1.ItemClicked += (o, e) => activeToolStripItem = e.ClickedItem;
}
设置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;
}
}