我需要做什么才能使Windows窗体应用程序能够在系统托盘中运行?
不是一个可以最小化到托盘的应用程序,而是一个只存在于托盘中的应用程序
一个图标 一个工具提示,和 一个“右键”菜单。
我需要做什么才能使Windows窗体应用程序能够在系统托盘中运行?
不是一个可以最小化到托盘的应用程序,而是一个只存在于托盘中的应用程序
一个图标 一个工具提示,和 一个“右键”菜单。
当前回答
Create a new Windows Application with the wizard. Delete Form1 from the code. Remove the code in Program.cs starting up the Form1. Use the NotifyIcon class to create your system tray icon (assign an icon to it). Add a contextmenu to it. Or react to NotifyIcon's mouseclick and differenciate between Right and Left click, setting your contextmenu and showing it for which ever button (right/left) was pressed. Application.Run() to keep the app running with Application.Exit() to quit. Or a bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}. Then set bRunning = false; to exit the app.
其他回答
notifyIcon1->ContextMenu = gcnew
System::Windows::Forms::ContextMenu();
System::Windows::Forms::MenuItem^ nIItem = gcnew
System::Windows::Forms::MenuItem("Open");
nIItem->Click += gcnew System::EventHandler(this, &your_class::Open_NotifyIcon);
notifyIcon1->ContextMenu->MenuItems->Add(nIItem);
我将接受的答案改编为。net Core,使用推荐的替换已弃用类:
腰椎->腰椎 ->工具箱
Program.cs
namespace TrayOnlyWinFormsDemo
{
internal static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new MyCustomApplicationContext());
}
}
}
MyCustomApplicationContext.cs
using TrayOnlyWinFormsDemo.Properties; // Needed for Resources.AppIcon
namespace TrayOnlyWinFormsDemo
{
public class MyCustomApplicationContext : ApplicationContext
{
private NotifyIcon trayIcon;
public MyCustomApplicationContext()
{
trayIcon = new NotifyIcon()
{
Icon = Resources.AppIcon,
ContextMenuStrip = new ContextMenuStrip()
{
Items = { new ToolStripMenuItem("Exit", null, Exit) }
},
Visible = true
};
}
void Exit(object? sender, EventArgs e)
{
trayIcon.Visible = false;
Application.Exit();
}
}
}
在。net 6中,我必须像这样工作我的类的核心:
private NotifyIcon trayIcon;
private ContextMenuStrip contextMenu1;
private ToolStripMenuItem menuItem1;
public MyCustomApplicationContext()
{
contextMenu1 = new System.Windows.Forms.ContextMenuStrip();
menuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuItem1.Text = "E&xit";
this.menuItem1.Click += new System.EventHandler(Exit);
this.contextMenu1.Items.AddRange(
new System.Windows.Forms.ToolStripMenuItem[] {this.menuItem1 });
trayIcon = new NotifyIcon(){Icon = Resources.AppIcon, ContextMenuStrip = this.contextMenu1, Visible = true };
}
Create a new Windows Application with the wizard. Delete Form1 from the code. Remove the code in Program.cs starting up the Form1. Use the NotifyIcon class to create your system tray icon (assign an icon to it). Add a contextmenu to it. Or react to NotifyIcon's mouseclick and differenciate between Right and Left click, setting your contextmenu and showing it for which ever button (right/left) was pressed. Application.Run() to keep the app running with Application.Exit() to quit. Or a bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}. Then set bRunning = false; to exit the app.
I've wrote a traybar app with .NET 1.1 and I didn't need a form. First of all, set the startup object of the project as a Sub Main, defined in a module. Then create programmatically the components: the NotifyIcon and ContextMenu. Be sure to include a MenuItem "Quit" or similar. Bind the ContextMenu to the NotifyIcon. Invoke Application.Run(). In the event handler for the Quit MenuItem be sure to call set NotifyIcon.Visible = False, then Application.Exit(). Add what you need to the ContextMenu and handle properly :)