0

我有一个 C# 表单,其中放置了一个 left-docking MenuStrip。这MenuStrip包含一些包含子菜单的菜单项,以及一些有效按钮的菜单项(单击它们会导致发生动作;注意,我意识到这不是一个好的设计)。

我想让具有与之关联的菜单的菜单项在菜单项上绘制向右箭头,就像上下文菜单一样。我已经分类ToolStripProfessionalRenderer并且可以OnRenderArrow()在适当的时间调用(例如,在OnRenderItemText()或类似的时间),但我似乎没有办法确定箭头的正确位置。

所以,这里有两个相互关联的问题:

  1. 有没有办法强制在顶级菜单项上绘制箭头?
  2. 如果没有,有没有办法确定菜单项上箭头的正确位置,以便OnRenderArrow()可以手动调用?

谢谢!

4

2 回答 2

1

为什么不考虑使用 System.Windows.Forms.ToolStrip 而不是 MenuStrip。这将允许您内置箭头功能,甚至可以解决您遇到的不良设计问题。

如果您愿意,您可以指定工具条项目不显示图像而只显示文本。通过这种方式,您几乎可以完全模仿菜单条的功能,但可以免费使用“下拉箭头”。

于 2008-10-07T15:57:29.220 回答
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);
        }
    }
}
于 2008-10-07T15:37:14.783 回答