当光标离开激活项时,工具条菜单项会自行更改颜色

Posted

技术标签:

【中文标题】当光标离开激活项时,工具条菜单项会自行更改颜色【英文标题】:Tool strip menu item changes its color by itself when cursor leaves activated item 【发布时间】:2016-06-06 08:39:29 【问题描述】:

我创建了一个 Windows 窗体工具并添加了一个包含多个项目的菜单条和一个下拉菜单。一切正常,当我选择下拉菜单项“文件”时,它会正确展开。但是当光标离开工具条菜单项“文件”到下拉菜单项时,它会自动将其颜色更改为白色,这样您就无法再阅读白色文本了:

Unclicked menu strip

Clicked menu strip with mouse cursor on dropdown items

我之前也有类似的菜单条颜色变化问题,所以我已经定义了一个渲染器:

class BlueRenderer : ToolStripProfessionalRenderer

    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
    
        if (!e.Item.Selected)
        
            base.OnRenderMenuItemBackground(e);
            e.Item.BackColor = Color.MediumBlue;  

        
        else
                        
            Rectangle rc = new Rectangle(Point.Empty, e.Item.Size);
            e.Graphics.FillRectangle(Brushes.Blue, rc);                
            e.Graphics.DrawRectangle(Pens.MediumBlue, 1, 0, rc.Width - 2, rc.Height - 1);                
            e.Item.BackColor = Color.MediumBlue;
            base.OnRenderItemBackground(e);
            e.Item.BackColor = Color.MediumBlue;
        
    
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    
        base.OnRenderItemText(e);
        if (!e.Item.Selected)
        
            e.Item.ForeColor = SystemColors.ControlLightLight;
        
        else
        
            e.Item.ForeColor = SystemColors.ControlLightLight;
        
    

我认为我必须更改渲染器中的另一个属性或行为,但我什至不知道哪个以及如何更改它。当鼠标光标离开此元素时,请帮助我将 itemcolor 保持为蓝色/中蓝色。

干杯

弗洛里安

【问题讨论】:

【参考方案1】:

通过尝试多个渲染器选项找到了解决方案: 我删除了我以前的“BlueRenderer”并指定了一个 ProfessionalColorTable:

public class ownColorTable : System.Windows.Forms.ProfessionalColorTable

    public override Color MenuItemPressedGradientBegin
    
        get
        
            return Color.Blue;
        
    

    public override Color MenuItemPressedGradientEnd
    
        get
        
            return Color.Blue;
        
    

然后我将 ToolStripProfessionalRenderer 初始化如下:

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

【讨论】:

以上是关于当光标离开激活项时,工具条菜单项会自行更改颜色的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的菜单项会激活滚动功能?

导航条——动态改变导航菜单的背景颜色

我们如何在单击菜单条项时突出显示活动菜单项?

Bootstrap 3下拉菜单在子菜单焦点上更改背景

QT背景颜色,菜单颜色更改

在java中单击菜单项时如何更改形状