代码之家  ›  专栏  ›  技术社区  ›  Ashish Rathore

菜单中的背景图像在悬停和单击时消失

  •  1
  • Ashish Rathore  · 技术社区  · 7 年前

    我正在创建Windows应用程序。在那个应用程序中,我需要在 MenuStrip 控件项而不是文本。背景图像工作正常,但图像在悬停并单击时消失。

    菜单项上的图像

    enter image description here

    单击/悬停时消失

    enter image description here

    有人知道如何在悬停或单击时显示不同的图像或相同的图像吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   kennyzx    7 年前

    你已经设置了 BackgroundImage 属性,在鼠标悬停时消失。

    应该设置 Image 改为属性。

    要在悬停时显示不同的图像,请为两者注册处理程序 MouseEnter MouseLeave 事件,并从处理程序更改Image属性。

    private void toolStripMenuItem1_MouseEnter(object sender, EventArgs e)
    {
        this.toolStripMenuItem1.Image = global::WindowsFormsApp1.Properties.Resources.Hover;
    }
    
    private void toolStripMenuItem1_MouseLeave(object sender, EventArgs e)
    {
        this.toolStripMenuItem1.Image = global::WindowsFormsApp1.Properties.Resources.Normal;
    }
    

    编辑: 为了满足你的要求 背景图像 悬停时,使用自定义渲染(首先移除 MouseEnter/MouseLeave 上面的代码,并同时设置 Image/BackgroundImage 没有人 在Designer中)。

    public Form1()
    {
        InitializeComponent();
        menuStrip1.Renderer = new BackgroundImageRenderer(); //menuStrip1 is the container for the toolstrip menu items.
    }
    
    private class BackgroundImageRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
        {                
            if (e.Item.Name == "toolStripMenuItem1")
            {                    
                Image backgroundImage = global::WindowsFormsApp1.Properties.Resources.Normal;
                if (e.Item.Selected)
                    backgroundImage = global::WindowsFormsApp1.Properties.Resources.Hover;
    
                e.Graphics.DrawImage(backgroundImage, 0, 0, e.Item.Width, e.Item.Height);
            }
            else
            {
                base.OnRenderMenuItemBackground(e);
            }
        }
    }