为 .NET 5/6 win 表单实现托盘图标上的菜单

Posted

技术标签:

【中文标题】为 .NET 5/6 win 表单实现托盘图标上的菜单【英文标题】:Implement a menu on tray icon for .NET 5/6 win forms 【发布时间】:2021-12-21 23:47:43 【问题描述】:

在没有主窗体的 .NET Framework 4.8 winform 应用程序中,我有以下代码:

    [STAThread]
    public static void Main()
    
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Daemon());
    
    public class Daemon : ApplicationContext
    
        private readonly NotifyIcon trayIcon;

        public Daemon()
        
            trayIcon = new NotifyIcon()
            
                Icon = "icon.ico",
                ContextMenu = new ContextMenu(new MenuItem[]
                 
                    new MenuItem("OPEN", new EventHandler(Open)),
                    new MenuItem("SETTINGS", new EventHandler(Settings)),
                    new MenuItem("EXIT", new EventHandler(Exit))
                ),
                Visible = true
            ;
        
    

在 .NET 5(或 6)win 表单应用程序中,NotifyIcon 对象没有 ContextMenu 属性,而是一个我不明白如何使用的 ContextMenuStrip

如何在没有主窗体的应用程序的尝试图标上创建一个简单的菜单?

【问题讨论】:

【参考方案1】:

这比预期的要简单。

public Daemon()

    trayIcon = new NotifyIcon()
    
        Icon = new Icon("icon.ico"),
        ContextMenuStrip = new ContextMenuStrip(),
        Visible = true
    ;

    trayIcon.ContextMenuStrip.Items.AddRange(new ToolStripItem[]
    
        new ToolStripMenuItem("OPEN", null, new EventHandler(Open), "OPEN"),
        new ToolStripMenuItem("SETTINGS", null, new EventHandler(Settings), "SETTINGS"),
        new ToolStripMenuItem("EXIT", null, new EventHandler(Exit), "EXIT")
    );

【讨论】:

以上是关于为 .NET 5/6 win 表单实现托盘图标上的菜单的主要内容,如果未能解决你的问题,请参考以下文章

Qt设置系统托盘图标和程序图标

如何将delphi程序图标放入系统托盘中?

Win32::GUI 更新托盘图标不起作用

在windows中任务栏上的内容为

OSX 上的 QT:托盘图标 - 图标 Dock 问题

win10最小化到托盘游戏掉线