Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在左侧停靠的菜单栏上绘制箭头?_C#_.net_Winforms_Menustrip - Fatal编程技术网

C# 如何在左侧停靠的菜单栏上绘制箭头?

C# 如何在左侧停靠的菜单栏上绘制箭头?,c#,.net,winforms,menustrip,C#,.net,Winforms,Menustrip,我有一个C#表单,在其中我放置了一个左停靠的MenuStrip。此MenuStrip包含一些包含子菜单的菜单项,以及一些有效按钮的菜单项(单击它们会导致动作发生;注意,我意识到这不是一个好的设计) 我想让菜单项与它们相关联的菜单在菜单项上画右箭头,就像上下文菜单一样。我已经对ToolStripProfessionalRenderer进行了子类化,可以在适当的时间调用onRenderRow()(例如,在OnRenderItemText()或类似程序中),但我似乎没有办法确定箭头的正确位置 这里有两

我有一个C#表单,在其中我放置了一个左停靠的
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的功能,但可以免费使用“下拉箭头”