C# WinForms trayapp MenuItem обнаружение наведения мыши

#c# #winforms #menuitem #mousehover

#c# #winforms #menuitem #наведение курсора мыши

Вопрос:

У меня довольно простой вопрос, но я не могу найти решение. У меня есть приложение, которое находится в панели задач. Когда пользователь щелкает правой кнопкой мыши по значку в трее, программа отображает меню элементов меню. Я хотел бы выполнять код при наведении курсора мыши на некоторые из моих меню.

Возможно ли это?

Можете ли вы направить меня в правильном направлении?

Я использую NotifyIcon

         trayMenu = new ContextMenu();
        trayMenu.MenuItems.Add("Exit", OnExit);

        trayIcon = new NotifyIcon();
        trayIcon.Text = "blah";

        trayIcon.Icon = new Icon("favicon.ico", 40, 40);
        trayIcon.ContextMenu = trayMenu;
        trayIcon.Visible = true;
  

Комментарии:

1. Какие кнопки? Вы только что описали меню, содержащее пункты меню. Я нигде не вижу кнопок.

2. @cody Приношу свои извинения. Обычно я не . Net developer и не подумал о том, что выбор слова противоречит . «Кнопка» сетевого управления. Я соответствующим образом отредактирую свой пост.

3. bdeetz, используете ли вы элемент управления NotifyIcon в своем приложении?

Ответ №1:

Вам придется использовать события MouseHover or MouseEnter и MouseLeave каждого элемента меню.

Обновление: Да, элементы управления NotifyIcon имеют свойство с именем ContextMenuStrip. Вам нужно будет создать элемент управления ContextMenuStrip для отображения меню. Он содержит элементы типа ToolStripMenuItems. Я попытался создать простой прототип — MouseHover работает просто отлично.

Комментарии:

1. MenuItems не раскрывают эти события

2. Я не думаю, что эти события существуют — по крайней мере, согласно MSDN

3. да, но вы используете ContextMenuStrips с ContextMenuItems с элементом управления NotifyIcon, к сожалению, эти элементы управления не предоставляют никаких событий выбора 😉

4. Джастин — зацени это msdn.microsoft.com/en-us/library /…

5. Спасибо, ребята. После перевода моего кода на использование ToolStripMenuItem вместо MenuItem я смог использовать обработчик событий для наведения курсора мыши. Еще раз спасибо.

Ответ №2:

Я думаю, вам может понадобиться событие выбора в MenuItem:

Это событие обычно возникает, когда пользователь наводит указатель мыши на пункт меню. Событие также может быть вызвано, когда пользователь выделяет пункт меню с помощью клавиатуры, прокручивая его с помощью клавиш со стрелками.

Комментарии:

1. Отрицательный ответ — ответ правильный, поскольку в вопросе указаны используемые элементы меню. Если вы не согласны, полезно оставить комментарий, объясняющий почему (если, конечно, вы не AC)

Ответ №3:

Вот ваше решение https://www.codeproject.com/Tips/254525/Automatically-display-Menu-on-Hover

 private void Form1_Load(object sender, EventArgs e)
{
    this.menuStrip1.Items[0].MouseHover  = new EventHandler(Form1_MouseHover);
}


void Form1_MouseHover(object sender, EventArgs e)
{
    if (sender is ToolStripDropDownItem)
    {
        ToolStripDropDownItem item = sender as ToolStripDropDownItem;
        if (item.HasDropDownItems amp;amp; !item.DropDown.Visible)
        {
            item.ShowDropDown();
        }
    }
}