如何在ContextMenuStrip中对齐分隔符

Fre*_*kyB 5 c# winforms

这是我的ContextMenuStrip代码:

        ContextMenuStrip _menuStrip = new ContextMenuStrip();
        Image image = new Bitmap("icon_main.ico");
        _menuStrip.Items.Add("First item", image);

        ToolStripSeparator stripSeparator1 = new ToolStripSeparator();
        stripSeparator1.Alignment = ToolStripItemAlignment.Right;//right alignment
        _menuStrip.Items.Add(stripSeparator1);

        _menuStrip.Items.Add("Second item", image);

        ToolStripSeparator stripSeparator = new ToolStripSeparator();
        stripSeparator.Alignment = ToolStripItemAlignment.Left;//left alignment
        _menuStrip.Items.Add(stripSeparator);

        _menuStrip.Items.Add("Exit", image, OnClickExit);            
        _mainIcon.ContextMenuStrip = _menuStrip;
Run Code Online (Sandbox Code Playgroud)

奇怪的是分隔符没有对齐 - 我在ContextMenuStrip的边缘和分隔符之间有一点空间,即使我尝试对齐分隔符(我已经尝试了两个 - 左右对齐):

在此输入图像描述

这不是一个很大的图形失败,但我问自己这是如何完美地对齐的:

在此输入图像描述

任何想法我该怎么办?

kma*_*zek 3

您应该使用Paint事件(msdn):

...
ToolStripSeparator stripSeparator = new ToolStripSeparator();                   
stripSeparator.Paint += stripSeparator_Paint;
_menuStrip.Items.Add(stripSeparator);
...
Run Code Online (Sandbox Code Playgroud)

绘制事件处理程序:

void stripSeparator_Paint(object sender, PaintEventArgs e)
{
    ToolStripSeparator stripSeparator = sender as ToolStripSeparator;
    ContextMenuStrip menuStrip = stripSeparator.Owner as ContextMenuStrip;
    e.Graphics.FillRectangle(new SolidBrush(Color.Transparent), new Rectangle(0, 0, stripSeparator.Width, stripSeparator.Height));
    using (Pen pen = new Pen(Color.LightGray, 1))
    {
        e.Graphics.DrawLine(pen, new Point(23, stripSeparator.Height / 2), new Point(menuStrip.Width, stripSeparator.Height / 2));
    }
}
Run Code Online (Sandbox Code Playgroud)