[c#] 我如何制作只能在系统托盘中运行的.NET Windows窗体应用程序?



4 Answers

代码项目文章codeproject.com/Articles/18683/Creating-a-Tasktray-Application给出了一个非常简单的解释和创建一个只存在于系统托盘中的应用程序的例子。

基本上改变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();
    }
}
Question

在系统托盘中运行Windows Forms应用程序需要做什么?

不是可以最小化托盘的应用程序,而是仅存在于托盘中的应用程序,只有图标,工具提示和“右键单击”菜单。




这是我用Visual Studio 2010 ,.NET 4做的

  1. 创建一个Windows窗体应用程序,在属性中设置“制作单个实例应用程序”
  2. 添加一个ContextMenuStrip
  3. 将一些条目添加到上下文菜单条中,双击它们以获得处理程序,例如'exit'(双击) - > handler - > me.Close()
  4. 在设计器中添加一个NotifyIcon,将contextMenuStrip设置为刚刚创建的那个,选择一个图标(可以在'common7 ...'下的VisualStudio文件夹中找到一些图标)
  5. 在设计器中设置表单的属性:FormBorderStyle:none,ShowIcon:false,ShowInTaskbar:false,Opacity:0%,WindowState:Minimized
  6. 在Form1_Load的末尾添加Me.Visible = false,这将在使用Ctrl + Tab时隐藏图标
  7. 根据需要运行和调整。



“系统托盘”应用程序只是一个常规的获胜表格应用程序,唯一不同的是它在Windows系统托盘区域创建了一个图标。 为了创建sys.tray图标使用NotifyIcon组件,您可以在Toolbox(通用控件)中找到它,并修改它的属性:图标,工具提示。 此外,它使您能够处理鼠标点击和双击消息。

还有一件事,为了达到外观和感觉或标准托盘应用程序。 在你的主要表单上添加followinf行显示事件:

private void MainForm_Shown(object sender, EventArgs e)
{
    WindowState = FormWindowState.Minimized;
    Hide();
} 



我用.NET 1.1编写了一个traybar应用程序,我不需要表单。
首先,将项目的启动对象设置为在模块中定义的Sub Main
然后以编程方式创建组件: NotifyIconContextMenu
一定要包含一个MenuItem “退出”或类似的。
ContextMenu绑定到NotifyIcon
调用Application.Run()
在Quit MenuItem的事件处理程序中,一定要调用set NotifyIcon.Visible = False ,然后调用Application.Exit() 。 将所需的内容添加到ContextMenu并正确处理:)




只需添加

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;

到你的表单对象。 系统托盘上只会显示一个图标。




Related