繁体   English   中英

如何以编程方式将 ContextMenu 添加到系统托盘图标?

[英]How to add ContextMenu to the system tray icon programmatically?

我想以编程方式将上下文菜单添加到我的托盘图标,这样当我右键单击托盘图标时,它应该会显示菜单。我应该如何为我的托盘图标编写右键单击事件处理程序?

我试过以下:

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
 }
}

声明事件处理程序为,

NotifyIcon.MouseRightClick += new MouseButtonEventHandler(NotifyIcon_MouseRightClick);

右键单击上下文菜单是自动的,无需处理。 只需构建菜单并将其分配给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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM