如何防止禁用的ToolStripMenuItem在鼠标悬停时显示边框?

时间:2012-11-13 16:45:47

标签: c# winforms border toolstripmenu

是的,与标题完全相同,在我的项目中,一些toolstripmenuitems被禁用。但是当我将光标放在菜单项上时,会出现一个蓝色边框: enter image description here
但我不想要这个。我想要这样:
enter image description here你能帮助我吗,我该如何阻止这个蓝色边框呢?

2 个答案:

答案 0 :(得分:9)

您应该创建自定义ToolStripRenderer,看看这个 - How to: Set the ToolStrip Renderer for an Application

  1. 您必须创建如下自定义渲染器:

    class CutomToolStripMenuRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
        {
            if (e.Item.Enabled)
            base.OnRenderMenuItemBackground(e);
        }
    
        protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
        {
            if (e.Item.Enabled)
            base.OnRenderMenuItemBackground(e);
        }
    } 
    
  2. 然后将此渲染器设置为菜单条:

    menuStrip1.Renderer = new CustomToolStripRenderer();
    

答案 1 :(得分:0)

我可以更好地控制我的"残疾人" menuItems通过在 ToolStripMenuItem 和项目的副本之间切换为 ToolStripLabel 。 然后,我只是切换两者之间的可见性,而不是设置Enabled = false。 通过这种方式,我可以为"已禁用" menuItem(标签)。

    bool m_isStartSvcEnabled = true;


    void ToggleServiceEnabled()
    {
        m_isStartSvcEnabled = !m_isStartSvcEnabled;

        mnuStartSvc.Visible = m_isStartSvcEnabled;
        lblStartSvc.Visible = !m_isStartSvcEnabled;

        mnuStopSvc.Visible = !m_isStartSvcEnabled;
        lblStopSvc.Visible = m_isStartSvcEnabled;
    }

enter image description here enter image description here

(白色菜单前色,以及我在项目创建中定义的标签的浅灰色前色。)