我需要做什么才能使Windows窗体应用程序能够在系统托盘中运行?
不是一个可以最小化到托盘的应用程序,而是一个只存在于托盘中的应用程序
一个图标 一个工具提示,和 一个“右键”菜单。
我需要做什么才能使Windows窗体应用程序能够在系统托盘中运行?
不是一个可以最小化到托盘的应用程序,而是一个只存在于托盘中的应用程序
一个图标 一个工具提示,和 一个“右键”菜单。
当前回答
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 :)
其他回答
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 :)
这是一个非常友好的框架通知区域应用程序…将NotificationIcon添加到基本表单并将自动生成的代码更改为下面的代码就足够了:
public partial class Form1 : Form
{
private bool hidden = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
//this.WindowState = FormWindowState.Minimized;
this.Hide();
hidden = true;
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
if (hidden) // this.WindowState == FormWindowState.Minimized)
{
// this.WindowState = FormWindowState.Normal;
this.Show();
hidden = false;
}
else
{
// this.WindowState = FormWindowState.Minimized;
this.Hide();
hidden = true;
}
}
}
您可以创建表单,修改它,然后将它传递给应用程序。作为参数运行。:
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
var form = new Form1();
form.Hide();
form.Opacity = 0;
form.ShowInTaskbar = false;
Application.Run(form);
}
}
添加你的通知图标和上下文菜单(如果需要)到你的表单在设计时作为一个常规的应用程序。确保你的通知图标是可见的,并有一个相关的图标。这还将允许您使用以后可能出于任何原因需要的表单
在。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 };
}