要使Windows Forms应用程序在系统托盘中运行,我需要做什么?
不是只能最小化托盘的应用程序,而是仅存在于托盘中的应用程序,仅包含图标,工具提示和“右键单击”菜单。
icon.Visible = false
,然后Dispose()
退出应用程序时显示图标。否则,程序退出后您仍然会看到该图标。经过几次测试后,您将不再知道哪个图标是真实的。
要使Windows Forms应用程序在系统托盘中运行,我需要做什么?
不是只能最小化托盘的应用程序,而是仅存在于托盘中的应用程序,仅包含图标,工具提示和“右键单击”菜单。
icon.Visible = false
,然后Dispose()
退出应用程序时显示图标。否则,程序退出后您仍然会看到该图标。经过几次测试后,您将不再知道哪个图标是真实的。
Answers:
代码项目文章“ 创建任务托盘应用程序”给出了一个非常简单的说明,并举例说明了创建仅存在于系统托盘中的应用程序。
基本上,改Application.Run(new Form1());
线Program.cs
,而不是启动一个类继承自ApplicationContext
,并有该类初始化一个构造函数NotifyIcon
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyCustomApplicationContext());
}
}
public class MyCustomApplicationContext : ApplicationContext
{
private NotifyIcon trayIcon;
public MyCustomApplicationContext ()
{
// Initialize Tray Icon
trayIcon = new NotifyIcon()
{
Icon = Resources.AppIcon,
ContextMenu = new ContextMenu(new MenuItem[] {
new MenuItem("Exit", Exit)
}),
Visible = true
};
}
void Exit(object sender, EventArgs e)
{
// Hide tray icon, otherwise it will remain shown until user mouses over it
trayIcon.Visible = false;
Application.Exit();
}
}
正如mat1t所说-您需要在应用程序中添加一个NotifyIcon,然后使用类似以下代码的内容来设置工具提示和上下文菜单:
this.notifyIcon.Text = "This is the tooltip";
this.notifyIcon.ContextMenu = new ContextMenu();
this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method)));
此代码仅显示系统托盘中的图标:
this.notifyIcon.Visible = true; // Shows the notify icon in the system tray
如果您有表格(出于任何原因),则需要以下内容:
this.ShowInTaskbar = false; // Removes the application from the taskbar
Hide();
右键单击以获取上下文菜单是自动处理的,但是如果要对左键单击执行某些操作,则需要添加Click处理程序:
private void notifyIcon_Click(object sender, EventArgs e)
{
var eventArgs = e as MouseEventArgs;
switch (eventArgs.Button)
{
// Left click to reactivate
case MouseButtons.Left:
// Do your stuff
break;
}
}
Form1
从代码中删除。Form1
。NotifyIcon
该类创建系统任务栏图标(为其分配图标)。NotifyIcon
的鼠标单击作出反应,并区分右键单击和左键单击,设置您的上下文菜单,并显示针对哪个按钮(右/左)被按下的内容。Application.Run()
保持应用程序Application.Exit()
退出运行。还是一个bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}
。然后设置bRunning = false;
退出应用程序。“系统任务栏”应用程序只是常规的win窗体应用程序,唯一的区别是它在Windows系统任务栏区域中创建了一个图标。为了创建sys.tray图标,请使用NotifyIcon组件,您可以在Toolbox(通用控件)中找到它,并修改其属性:Icon,工具提示。此外,它还使您能够处理鼠标单击和双击消息。
还有一件事情,是为了获得外观或标准的托盘应用程序。在您的主窗体显示事件上添加followinf行:
private void MainForm_Shown(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
Hide();
}
据我所知,您仍然必须使用表单编写应用程序,但是对表单没有控件,也永远不要将其设置为可见。使用NotifyIcon(可在此处找到MSDN示例)来编写您的应用程序。
这是我使用Visual Studio 2010,.NET 4的方法
对于Notification Area Application这是一个非常友好的框架...足以将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;
}
}
}
只需添加
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
到您的表单对象。您将在系统托盘上仅看到一个图标。