c# – 更改Winforms菜单下拉列表的边框颜色

是否可以更改工具条菜单下拉列表的边框颜色.

在下面的示例中,我希望下拉菜单有1种颜色(蓝色),而当前没有白色边框被移位,但保持主菜单(“我的菜单”)项目为白色.

有任何想法吗?

enter image description here

是否可以更改工具条菜单下拉列表的边框颜色.

是.从ProfessionalColorTable继承的类按预期工作:

class MenuColorTable : ProfessionalColorTable
{
    public MenuColorTable()
    {
        // see notes
        base.UseSystemColors = false;
    }
    public override System.Drawing.Color MenuBorder
    {
        get{return Color.Fuchsia;}
    }
    public override System.Drawing.Color MenuItemBorder
    {
        get{return Color.DarkViolet;}
    }
    public override Color MenuItemSelected
    {
        get { return Color.Cornsilk;}
    }
    public override Color MenuItemSelectedGradientBegin
    {
        get{return Color.LawnGreen;}
    }
    public override Color MenuItemSelectedGradientEnd
    {
        get { return Color.MediumSeaGreen; }
    }
    public override Color MenuStripGradientBegin
    {
        get { return Color.AliceBlue; }
    }
    public override Color MenuStripGradientEnd
    {
        get { return Color.DodgerBlue; }
    }
}

在表单加载中:

menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MenuColorTable());

如果未打开视觉样式,则不会使用所有颜色表项,而是使用某些SystemColors.您在Main()中启用视觉样式:

// must be done before any UI elements are used
Application.EnableVisualStyles();

您可能还想要禁用系统颜色,如ctor中所示.无论视觉样式是否启用,默认值都应为false,但是可能还有其他一些改变了吗?

base.UseSystemColors = false;

EnableVisualStyles()和UseSystemColors = false;必须使用颜色表中的所有渲染元素来实现,否则只使用一些. (尽管如此,无论如何,MenuBorder似乎都能正常工作.)否则,结果如预期:

enter image description here

菜单渐变从AliceBlue到DodgerBlue;将鼠标悬停在它上面的项目使用LawnGreen到MediumSeaGreen的从上到下的渐变(鼠标未显示).

enter image description here

打开时,菜单边框是Fuschia(mmmm,舒缓!)

enter image description here

将鼠标悬停在其中一个项目上(鼠标未显示),该项目使用MenuItemSelected颜色,即Consilk.

如果您在覆盖工作时遇到问题,请检查您是否正在使用正确的覆盖(或者他们的意思是名称所暗示的,有些人首先会误导).

您可能还会检查您是否正在使用菜单的MenuStrip,Net确实有另一个(较旧的)菜单类,但您必须搜索才能找到它.您还可以更改或禁用任何主题,以查看是否可能导致不利影响.

https://stackoverflow.com/questions/32307778/change-the-border-color-of-winforms-menu-dropdown-list

转载注明原文:c# – 更改Winforms菜单下拉列表的边框颜色