【问题标题】:How to change the appearance of a MenuStrip [duplicate]如何更改 MenuStrip 的外观 [重复]
【发布时间】:2023-03-09 13:40:02
【问题描述】:

我在我的应用程序中添加了一个MenuStrip,并在Render Mode 添加了ManagerRenderMode。问题在于外观,看内脏。看看那两张照片,我想把子菜单的白色边框改成透明的,那个蓝色的长方形看起来像灰色的菜单和深灰色的子菜单(他的边框是深蓝色)和白色的边框选择时的菜单。我怎么能做到这一点?

BackColor 是:36; 36; 36ForeColorLightGray

我设法更改了蓝色矩形,选择选项时的白色矩形,选择子菜单选项时的蓝色矩形,但我不知道如何更改white border,请帮助..

这是目前为止的代码...

        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; }
        }

【问题讨论】:

    标签: c# border items appearance menustrip


    【解决方案1】:

    您可以通过创建自己的 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());
    }
    

    【讨论】:

    • 有点像我得到的,除了我采用了绘图方法。对于 OP 的需求,这可能更简单。投票++;
    • 你的方法对我有帮助,但我不知道如何更改子菜单的边框(第二张图片,白色边框)。帮助..
    • @AnDr3yy:查看我的编辑 - 它似乎是您需要覆盖的 MenuBorder 属性。
    • 哇,谢谢!我什至不知道这是可能的,一个全新的世界为我打开了:D
    • 更好的 VisualStudio 为覆盖的其他可能性提供建议。非常感谢这个!!!上升了。
    【解决方案2】:

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

    看看ToolStripProfessionalRenderer

    使用示例

    public class MyToolStripRenderer : ToolStripProfessionalRenderer
    {
        /* override styling/drawing here */
    }
    
    MenuStrip strip = new MenuStrip();
    
    strip.Renderer = new MyToolStripRenderer();
    
    //this will set RenderMode to "Custom"
    

    考虑将此example on CodeProject 用作一些研究。

    更好的是,VBForum 有很多,已经实现(在通常的 Luna、Office、Windows、Visual Studio 样式中!)

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

    如果您只是想更改颜色...使用 Pondidum 的答案!它涉及的工作更少!

    【讨论】:

    • vbforums 链接非常有趣,您的方法当然提供了更多控制(覆盖外观,而不仅仅是颜色)。
    • 如何更改 elementToolStripMenuItem 的位置。有什么方法可以设置 elementToolstripMenuItem 的位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多