C# 如何在左侧停靠的菜单栏上绘制箭头?
我有一个C#表单,在其中我放置了一个左停靠的C# 如何在左侧停靠的菜单栏上绘制箭头?,c#,.net,winforms,menustrip,C#,.net,Winforms,Menustrip,我有一个C#表单,在其中我放置了一个左停靠的MenuStrip。此MenuStrip包含一些包含子菜单的菜单项,以及一些有效按钮的菜单项(单击它们会导致动作发生;注意,我意识到这不是一个好的设计) 我想让菜单项与它们相关联的菜单在菜单项上画右箭头,就像上下文菜单一样。我已经对ToolStripProfessionalRenderer进行了子类化,可以在适当的时间调用onRenderRow()(例如,在OnRenderItemText()或类似程序中),但我似乎没有办法确定箭头的正确位置 这里有两
MenuStrip
。此MenuStrip
包含一些包含子菜单的菜单项,以及一些有效按钮的菜单项(单击它们会导致动作发生;注意,我意识到这不是一个好的设计)
我想让菜单项与它们相关联的菜单在菜单项上画右箭头,就像上下文菜单一样。我已经对ToolStripProfessionalRenderer
进行了子类化,可以在适当的时间调用onRenderRow()
(例如,在OnRenderItemText()
或类似程序中),但我似乎没有办法确定箭头的正确位置
这里有两个相互关联的问题:
OnRenderArrow()
谢谢 我能够将此作为一种解决方案进行整合,但我仍然想要一些不那么迟钝的东西:
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
base.OnRenderItemText(e);
if (e.Item.GetType() == typeof(ToolStripMenuItem))
{
ToolStripMenuItem tsmi = (ToolStripMenuItem)e.Item;
if (tsmi.HasDropDownItems && tsmi.OwnerItem == null)
{
Rectangle bounds = tsmi.Bounds;
bounds.X = bounds.Right - 25;
bounds.Width = 25;
bounds.Y = 0;
ToolStripArrowRenderEventArgs tsarea = new ToolStripArrowRenderEventArgs(
e.Graphics,
e.Item,
bounds,
e.TextColor,
ArrowDirection.Right);
OnRenderArrow(tsarea);
}
}
}
为什么不考虑使用System.Windows.Forms.ToolStrip而不是MenuStrip呢。这将允许您内置箭头功能,甚至可以解决您遇到的糟糕设计问题 如果需要,可以指定toolstrip项不显示图像而仅显示文本。通过这种方式,您几乎可以完全模仿menustrip的功能,但可以免费使用“下拉箭头”