我有一个C#表单,我放置了一个左对接的MenuStrip
。这个MenuStrip
包含一些包含子菜单的菜单项,以及一些有效按钮的菜单项(点击它们会导致动作发生; n.b.,我意识到这不是一个好的设计)。
我希望菜单项具有与之关联的菜单,在菜单项上绘制向右箭头,与上下文菜单相同。我已经将ToolStripProfessionalRenderer
子类化,并且可以在适当的时间调用OnRenderArrow()
(例如,在OnRenderItemText()
或类似内),但我似乎没有办法确定正确的位置箭头。
所以,这里有两个相互关联的问题:
OnRenderArrow()
?谢谢!
答案 0 :(得分:1)
为什么不考虑使用System.Windows.Forms.ToolStrip而不是MenuStrip。这将允许您内置箭头功能,甚至可以解决您遇到的不良设计问题。
您是否希望可以指定工具条项目不显示图像而仅显示文本。通过这种方式,您几乎可以完全模仿menustrip的功能,但可以免费获得“下拉箭头”。
答案 1 :(得分:0)
我能够一起解决这个问题,但我仍然喜欢不那么迟钝的东西:
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);
}
}
}