如何更改MenuStrip的外观

5
我在我的应用程序中添加了一个MenuStrip,并在Render Mode的ManagerRenderMode中添加了它。问题出在外观上,看起来很糟糕。看一下这两张照片,我想把子菜单的白色边框变成透明的,把那个在灰色背景下看起来很糟糕的蓝色矩形改为深灰色菜单和子菜单(边框是深蓝色),以及当选中菜单时的白色边框。我该怎么做呢?
BackColor为36;36;36,ForeColor为LightGray。
我已经成功更改了蓝色矩形、选项被选中时的白色矩形、选择子菜单选项时的蓝色矩形,但不知道如何更改白色边框,请帮忙解决。
到目前为止,以下是代码...
        Color culoare = Color.FromArgb(20, 20, 20);
        Color culoare1 = Color.FromArgb(36, 36, 36);

        public override Color MenuItemSelected
        {
            get { return culoare; }
        }

        public override Color MenuItemBorder
        {
            get { return culoare; }
        }

        public override Color MenuItemSelectedGradientBegin
        { 
            get { return culoare; } 
        }

        public override Color MenuItemSelectedGradientEnd
        { 
            get { return culoare; } 
        }

        public override Color MenuItemPressedGradientBegin
        { 
            get { return culoare; }
        }

        public override Color MenuItemPressedGradientEnd
        {
            get { return culoare; }
        }

        public override Color MenuBorder
        {
            get { return culoare; }
        }
2个回答

19
你可以通过创建自己的ColorTable,并覆盖你想要更改颜色的属性来实现这一点:
public  class TestColorTable : ProfessionalColorTable
{
    public override Color MenuItemSelected
    {
        get { return Color.Red; }
    }

    public override Color MenuBorder  //added for changing the menu border
    {
        get { return Color.Green; }
    }

}

你可以这样使用它:

private void Form1_Load(object sender, EventArgs e)
{
    menuStrip1.Renderer = new ToolStripProfessionalRenderer(new TestColorTable());
}

这差不多是我想表达的,只不过我采用了绘图的方法。对于楼主的需求来说,这可能更简单。vote ++; - Matthew Layton
你的方法帮了我,但我不知道如何更改子菜单的边框(第二张图片中的白色边框)。请帮忙。 - AnDr3yy
@AnDr3yy:看一下我的编辑——似乎你需要覆盖MenuBorder属性。 - Pondidum
哇,谢谢!我甚至不知道这是可能的,一个全新的世界为我打开了:D - Nick Peelman
甚至更好的是,VisualStudio提供了覆盖其他可能性的建议。非常感谢!!!升级了。 - C4d

4

您的方法不正确。您不应使用前景色/背景色来设置菜单和工具栏的样式。

请查看ToolStripProfessionalRenderer

如何使用示例

public class MyToolStripRenderer : ToolStripProfessionalRenderer
{
    /* override styling/drawing here */
}

MenuStrip strip = new MenuStrip();

strip.Renderer = new MyToolStripRenderer();

//this will set RenderMode to "Custom"

考虑使用CodeProject上的示例进行一些研究。
更好的是,VBForums已经有了大量已实现的样式(通常是Luna、Office、Windows、Visual Studio风格!)

http://www.vbforums.com/showthread.php?596563-100-Customizable-MenuStrip-ToolStrip-StatusStrip-including-common-presets

如果你只是想改变颜色...使用Pondidum的答案!它需要更少的工作!

这个vbforums链接非常有趣,而且你的方法确实提供了更多的控制(覆盖外观,而不仅仅是颜色)。 - Pondidum
我该如何改变elementToolStripMenuItem的位置?有没有办法为elementToolstripMenuItem设置位置? - Sam10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接