在 .NET 5/6 win 表单的托盘图标上实现菜单
Implement a menu on tray icon for .NET 5/6 win forms
在没有主窗体的 .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
不懂怎么用
如何为没有主窗体的应用程序在试用图标上创建一个简单的菜单?
比想象中简单。
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")
});
}
与接受的答案相同,但更简洁,无论好坏:
public Daemon()
{
trayIcon = new NotifyIcon()
{
Icon = new Icon("icon.ico"),
ContextMenuStrip = new ContextMenuStrip()
{
Items =
{
new ToolStripMenuItem("OPEN", null, new EventHandler(Open), "OPEN"),
new ToolStripMenuItem("SETTINGS", null, new EventHandler(Settings), "SETTINGS"),
new ToolStripMenuItem("EXIT", null, new EventHandler(Exit), "EXIT")
}
},
Visible = true
};
}
如果 Items = {...}
语法看起来很奇怪,请参阅 。
此外,here is a table 显示了在 .NET Core 3 中删除的 Windows 表单 类 及其相应的替代品。
在没有主窗体的 .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
不懂怎么用
如何为没有主窗体的应用程序在试用图标上创建一个简单的菜单?
比想象中简单。
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")
});
}
与接受的答案相同,但更简洁,无论好坏:
public Daemon()
{
trayIcon = new NotifyIcon()
{
Icon = new Icon("icon.ico"),
ContextMenuStrip = new ContextMenuStrip()
{
Items =
{
new ToolStripMenuItem("OPEN", null, new EventHandler(Open), "OPEN"),
new ToolStripMenuItem("SETTINGS", null, new EventHandler(Settings), "SETTINGS"),
new ToolStripMenuItem("EXIT", null, new EventHandler(Exit), "EXIT")
}
},
Visible = true
};
}
如果 Items = {...}
语法看起来很奇怪,请参阅
此外,here is a table 显示了在 .NET Core 3 中删除的 Windows 表单 类 及其相应的替代品。