我需要做什么才能使Windows窗体应用程序能够在系统托盘中运行?

不是一个可以最小化到托盘的应用程序,而是一个只存在于托盘中的应用程序

一个图标 一个工具提示,和 一个“右键”菜单。


当前回答

这是一个非常友好的框架通知区域应用程序…将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;
        }
    }
}

其他回答

这是一个非常友好的框架通知区域应用程序…将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);
        }
    }

添加你的通知图标和上下文菜单(如果需要)到你的表单在设计时作为一个常规的应用程序。确保你的通知图标是可见的,并有一个相关的图标。这还将允许您使用以后可能出于任何原因需要的表单

据我所知,您仍然必须使用表单编写应用程序,但在表单上没有控件,并且永远不会将其设置为可见。使用NotifyIcon(可以在这里找到它的MSDN示例)来编写应用程序。

正如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();

右键点击获得上下文菜单是自动处理的,但如果你想在左键点击上做一些操作,你需要添加一个点击处理程序:

    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;
        }
    }
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);