Как программно добавить 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)
    }
}
Другие вопросы по тегам