Как программно добавить ContextMenu к значку на панели задач?
Я хочу программно добавить контекстное меню к значку в панели задач, чтобы при щелчке правой кнопкой мыши по значку в панели задач отображалось меню. Как мне написать обработчик событий, вызываемый щелчком правой кнопкой мыши по значку в области уведомлений?
Я попробовал ниже:
private void Icon_MouseRightClick(object sender, MouseButtonEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left) // shows error ate button
{
return;
}
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
// code for adding context menu
}
}
Объявлен Eventhandler как,
NotifyIcon.MouseRightClick += new MouseButtonEventHandler(NotifyIcon_MouseRightClick);
2 ответа
Решение
Контекстное меню при щелчке правой кнопкой мыши является автоматическим, не нужно обрабатывать его. Просто создайте свое меню и назначьте его NotifyIcon.ContextMenu.
- Отображать приложение при щелчке левой кнопкой мыши по значку в доке
- Показывать контекстное меню при щелчке правой кнопкой мыши по значку в доке
class AppDelegate: NSObject, NSApplicationDelegate {
private var menuBarIcon: NSStatusItem!
func applicationDidFinishLaunching(_ aNotification: Notification) {
createMenuBarIcon()
}
}
// Dock Icon
extension AppDelegate {
func createMenuBarIcon() {
self.menuBarIcon = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
self.menuBarIcon?.button?.action = #selector(menuBarIconClicksAction(_:))
self.menuBarIcon?.button?.sendAction(on: [.leftMouseUp, .rightMouseUp])
self.menuBarIcon?.button?.target = self
let icon = NSImage(named: "MenuBarAppIcon")
icon?.size = .init(width: 20, height: 20)
self.menuBarIcon?.button?.image = icon
}
}
// Dock Menu
extension AppDelegate {
@IBAction func menuBarIconClicksAction(_ sender: AnyObject) {
guard let event = NSApp.currentEvent else { return }
if event.type == NSEvent.EventType.rightMouseUp {
menuBarIcon.menu = dockContextMenu(NSApplication.shared)
menuBarIcon.button?.performClick(nil)
menuBarIcon.menu = nil
} else {
showMainWnd()
}
}
func dockContextMenu(_ sender: NSApplication) -> NSMenu {
let dockMenu = NSMenu()
dockMenu.addItem( NSMenuItem(title: String(localized: "Quit FileBo") , action: #selector(QuitFileBo(_:)), keyEquivalent: "") )
return dockMenu
}
@IBAction func QuitFileBo(_ sender: AnyObject) {
NSApplication.shared.terminate(nil)
}
}