• C#系统托盘功能实现


    功能

    软件在单击关闭按钮时,并不会退出进程,而是在任务栏显示一个系统托盘图标

    知识点

    notifyicon控件

    命名空间:System.Windows.Forms
    程序集:System.Windows.Forms.dll

    指定可在通知区域创建图标的组件。 此类不能被继承。

    通知区域中的图标是计算机后台运行的进程的快捷方式,例如病毒防护程序或音量控制。 这些进程不附带自己的用户界面。 该 NotifyIcon 类提供了一种在此功能中编程的方法。 该 Icon 属性定义显示在通知区域中的图标。 图标的弹出菜单使用 ContextMenu 属性进行寻址。 该 Text 属性分配工具提示文本。 为了使图标显示在通知区域中, Visible 属性必须设置为 true。

    ContexMenuStrip控件

    命名空间:System.Windows.Forms
    程序集:System.Windows.Forms.dll

    表示快捷菜单

    ContextMenuStrip 替换了 ContextMenu。 可以将 a ContextMenuStrip 与任何控件相关联,右键单击会自动显示快捷菜单。 可以使用 Show 方法以编程方式显示 ContextMenuStrip。 ContextMenuStrip 支持可取消的 Opening 和 Closing 事件来处理动态填充和多单击情形。 ContextMenuStrip 支持图像、菜单项检查状态、文本、访问键、快捷方式和级联菜单。

    SizeChanged

    每当控件的大小发生更改时,调用与控件事件关联的 SizeChanged 事件处理程序。. 此事件处理程序显示一个消息框,指示控件的大小已更改。

    windowState

    命名空间:System.Windows.Forms
    程序集:System.Windows.Forms.dll

    获取或设置一个值,该值指示窗体是最小化(Minimized)、最大化(Maximized)还是正常(Normal)。

    DialogResult类

    命名空间:System.Windows.Forms
    程序集:System.Windows.Forms.dll

    指定标识符以指示对话框的返回值。

    属性枚举值说明
    Abort3对话框的返回值是 Abort(通常从标签为“中止”的按钮发送)。
    Cancel2对话框的返回值是 Cancel(通常从标签为“取消”的按钮发送)。
    Continue11对话框返回值是“继续” (通常从标记为“继续”) 的按钮发送。
    Ignore5对话框的返回值是 Ignore(通常从标签为“忽略”的按钮发送)。
    No7对话框的返回值是 No(通常从标签为“否”的按钮发送)。
    None0从对话框返回了 Nothing。 这表明有模式对话框继续运行。
    OK1对话框的返回值是 OK(通常从标签为“确定”的按钮发送)。
    Retry4对话框的返回值是 Retry(通常从标签为“重试”的按钮发送)。
    TryAgain10对话框返回值是“重试” (通常从标记为“重试”的按钮发送) 。
    Yes6对话框的返回值是 Yes(通常从标签为“是”的按钮发送)。
    public void DialogResultFuc()
    {
    	string message = "今天你摸鱼了吗";
        string caption = "热爱工作,热爱生活";
        MessageBoxButton buttons = MessageBoxButton.YesNo;
        DialogResult result;
        
        result = Message.Show(this,message,caption,buttons);
        if(result == DialogResult.Yes)
        {
            this.Close();
        }
            
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Application类

    命名空间:System.Windows
    程序集:PresentationFramework.dll

    封装 Windows Presentation Foundation 应用程序。

    Application 是封装 WPF 应用程序特定功能的类,包括:

    应用程序生存期:Activated、、Current、、RunSessionEndingDeactivatedExitShutdownDispatcherUnhandledException、。 StartupShutdownMode

    应用程序范围窗口、属性和资源管理:FindResource、、GetContentStream、、GetResourceStream、LoadComponent、MainWindowProperties、Resources、StartupUri。 Windows

    命令行参数和退出代码处理:Application.Startup、、Application.ExitApplication.Shutdown。

    导航:FragmentNavigation、、LoadCompleted、Navigated、NavigationProgressNavigating、NavigationStoppedNavigationFailed、、SetCookie。 GetCookie

    MessageBoxButton

    命名空间:System.Windows
    程序集:PresentationFramework.dll

    指定显示在消息框上的按钮。 用作 Show 方法的参数。

    字段枚举值说明
    OK0消息框显示“确定”按钮。
    OKCancel1消息框显示“确定”和“取消”按钮。
    YesNo4消息框显示“是”和“否”按钮。
    YesNoCancel3消息框显示“是”、“否”和“取消”按钮。

    实现步骤

    画面组态

    添加控件notificon。

    将notiicon控件属性中contextMenuStrip修改为ContentMenuStrip控件的Name属性值。

    在属性值ICon修改自己相应的图标,格式为.icon

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTkzAMs4-1658760546997)(C:\Users\buluw\AppData\Roaming\Typora\typora-user-images\image-20220725223503629.png)]

    添加控件ContentMeunStrip控件

    修改控件的属性集合值,增加退出主界面显示

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XVynZqo-1658760546998)(C:\Users\buluw\AppData\Roaming\Typora\typora-user-images\image-20220725223827677.png)]

    代码编写

    根据窗体不同变化,修改notiicon的可见性

    根据notificon事件,窗体变化

    操作快捷菜单事件,窗体随之变化

    private void Form1_SizeChanged(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Normal)
                {
                    notifyIcon1.Visible = false;
                }
                else if (this.WindowState == FormWindowState.Minimized)
                {
                    this.Hide();
                    notifyIcon1.Visible = true;
                }
    
            }
    
            private void notifyIcon1_DoubleClick(object sender, EventArgs e)
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
            }
    
            private void 主界面显示ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                notifyIcon1_DoubleClick(null, null);
            }
    
            private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                DialogResult result = MessageBox.Show("确定退出吗?", "退出",
                    MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (result == DialogResult.OK)
                    Application.ExitThread();
                else
                    this.WindowState = FormWindowState.Minimized;
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    探索互联世界的灯光艺术:FastLED库详细介绍及应用实例
    Typescript基本语法介绍
    Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
    合并后的以太坊会像一个流域
    7.Consul服务注册与发现
    数据科学家赚多少?数据全分析与可视化 ⛵
    Vue开发小注意点
    vivado闪退或者message无显示
    Linux(Ubuntu)下源码开发整个流程完成版本(下载->编译->模拟器运行)
    Python学习笔记:导入txt、xlsx文件并做简单函数处理
  • 原文地址:https://blog.csdn.net/yue008/article/details/125985065