Фоновое изображение в Menustrip. Элемент исчез при наведении курсора - PullRequest
0 голосов
/ 22 октября 2018

Я создаю приложение для Windows.В этом приложении мне нужно показывать изображения на MenuStrip элементах управления вместо текста.Фоновое изображение работает нормально, но изображение исчезло при наведении курсора и щелкните.

Изображение в пункте меню

enter image description here

Исчезло при нажатии /hover

enter image description here

Может кто-нибудь иметь представление о том, что делать, чтобы показать другое изображение или такое же изображение при наведении курсора или нажатии.

1 Ответ

0 голосов
/ 22 октября 2018

Вы установили свойство 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;
}

Редактировать: Если вы хотите, чтобы при наведении указывалось другое BackgroundImage, используйте пользовательский рендер (сначала удалите код MouseEnter/MouseLeave, указанный выше, и установите для обоих Image/BackgroundImage значение none в конструкторе).

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