Windows右下角托盘程序是Windows系统的一大特色。在某些场景非常适用。

因业务需要实现一个后台程序,需要开机自动启动,默认不显示窗体,点击系统右下角托盘图标时显示窗体,关闭窗体时隐藏而不退出程序,在托盘图标上点右键显示菜单,可以退出。

一、托盘图标的实现

C#中提供了notifyIcon组件实现托盘程序,将组件拖拽到窗体中,设置图标,设置点击事件。

二、窗体的隐藏与显示

隐藏窗口的方法有几种,下面介绍一种较为简单不绕弯的方法:

众所周知,Windows的窗口右上角有最小化、最大化、关闭三个按钮。如果将窗口最小化后,桌面上就没有窗体了,只会在任务栏显示,如果用代码将任务栏的显示也去掉那就真正隐藏了窗口了。

本例子就是使用此方式实现窗口隐藏的。

三、右键菜单

拖拽ContextMenuStrip组件到窗体,添加菜单项并设置事件,设置NotifyIcon组件的contextMenuStrip属性为右键菜单的name。

四、综合示例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
using System.Windows.Forms.Design; namespace U8FileTransfer
{
public partial class Main : Form
{
public Main()
{
// 程序默认启动时隐藏窗体
windowDisplay(false); InitializeComponent();
} private void Main_Load(object sender, EventArgs e)
{
} /// <summary>
/// 自定义方法:窗体的隐藏与显示
/// </summary>
/// <param name="display"></param>
private void windowDisplay(bool display)
{
if (display)
{
this.WindowState = FormWindowState.Normal; // 窗口常规化
this.ShowInTaskbar = true; // 显示在任务栏
}
else
{
this.WindowState = FormWindowState.Minimized; // 窗口最小化
this.ShowInTaskbar = false; // 不显示在任务栏
} } // 点击托盘图标显示出窗体
private void notifyIcon_Click(object sender, EventArgs e)
{
// 需要将事件转换成鼠标事件
MouseEventArgs mouseEvent = (MouseEventArgs)e;
if (mouseEvent.Button == MouseButtons.Left) // 点击左键才弹出
{
windowDisplay(true);
}
} // 点击右上角X时仅隐藏窗体不退出
private void Main_Closing(object sender, FormClosingEventArgs e)
{
windowDisplay(false);
e.Cancel = true;
} // 在托盘图标右键点菜单“显示界面”时显示窗体
private void showWindowMenuItem_Click(object sender, EventArgs e)
{
windowDisplay(true);
} // 在托盘图标右键点菜单“退出”时退出程序
private void exitMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
    }
}

参考文档:

C#实现右下角托盘程序,默认不显示窗体,关闭窗体时隐藏而不退出的更多相关文章

  1. 应用程序默认安装在C盘后启动时提示权限不足想起的。。。

    最近不少经销商用户反映,在使用win 7的系统的电脑上安装我们的软件后,开启系统时提示权限不足,无法启动软件. 而在xp系统下则没有这个问题,原因在于我们将系统的默认安装路径选择在了C盘了,而win ...

  2. Delphi 托盘程序实现 转

    unit MainUnit; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F ...

  3. 设置Activity显示和关闭时的动画效果

    设置Activity显示和关闭时的动画效果 通过overridePendingTransition方法可以设置Activity显示和关闭的动画效果.首先需要在res/anim目录中建立相应的动画资源文 ...

  4. Winform设置托盘程序,托盘显示

    1.拖一个NotifyIcon,一个ContextMenuStrip控件到主窗体中 2.设置notifyIcon1,一个contextMenuStrip1(如下图) Icon为托盘图标,Text托盘显 ...

  5. 更改开机默认不显示explorer.exe,直接启动自己写的EXE程序方法

    原文:更改开机默认不显示explorer.exe,直接启动自己写的EXE程序方法 更改开机默认不显示explorer.exe,直接启动自己写的EXE程序的函数: bool UpdateWinlogon ...

  6. VC最小化到托盘程序

    在实际操作电脑的过程中,我们常常可以看到一些应用程序可以最小化到桌面右下角的托盘中显示,如一些杀毒软件等开机就显示在托盘中,或是我们常用的QQ等聊天工具,都可以最小化在托盘中,如图-1. 在图-1中, ...

  7. delphi 托盘程序 转

    Delphi的托盘编程   .现在很多程序都用这个,比如傲游,迅雷等,主要代码如下: uses Windows, Messages, SysUtils, Variants, Classes, Grap ...

  8. WinForm 之 窗口最小化到托盘及右键图标显示菜单

    Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. ...

  9. WinForm 之 程序启动不显示主窗体

    在 WinForm 程序启动时,不显示主窗体的实现方法主要有以下5种,第五种最简单,而且效果也不错,第四种方法也值得推荐. 实例代码如下: //隐藏窗体的方法1/5:不指定任何窗体为主窗体 //注意: ...

  10. C#托盘程序设置

    打开Microsoft Visual Studio 2010,新建解决方案--添加项目--托盘的实现     从工具栏里,把NotifyIcon控件拖到窗体上,并设置属性: 1.visible 设置默 ...

随机推荐

  1. UniDBGrid控件的几个功能优化

    内容自动换行 默认UniDBGrid的cell内的内容如果超出表格列宽并不自动换行和调整行高,给客户带来极大的不方便,通过修改ServerModule的属性CustomCSS可以实现. <sty ...

  2. Python基础教程:赋值的多个方式

    一.序列解包/可迭代对象解包 释义:将一个序列(或任何可迭代的对象)解包,并将得到的值存储到一系列变量中. 1.并行赋值 >>> x,y,z = 1,2,3 >>> ...

  3. 声网 VQA:将实时互动中未知的视频画质用户主观体验变可知

    在实时互动场景中,视频画质是影响观众体验的关键指标,但如何实时评价视频的画质一直是个行业难题,需要将未知的视频画质用户主观体验变成可知. 未知的部分往往是最需要攻克的,声网也一直在持续探索符合实时互动 ...

  4. Python地理分析库whitebox在Anaconda中的配置

      本文介绍在Anaconda环境下,安装Python中的一个高级地理空间数据分析库whitebox的方法.   首先,我们打开"Anaconda Prompt (Anaconda)&quo ...

  5. C++/Qt网络通讯模块设计与实现(三)

    上一节给大家从源码级别分析了SNetClient网络客户端的实现过程,详见​C++/Qt网络通讯模块设计与实现(二),并给大家留了一个疑问,即引入SNetClientRunning类是为了解决什么问题 ...

  6. java多线程---4 线程同步介绍及不安全案例说明

    java多线程---4 线程同步介绍及不安全案例说明 线程同步 并发: 同一个对象被多个线程同时操作. 处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要线程同步 ...

  7. SpringBoot——静态资源及原理

    一.使用 SpringBoot 的步骤 [1]创建 SpringBoot应用,选中自己需要的模块.[2]SpringBoot 已经默认将这些场景配置好,只需要在配置文件中指定少量配置就可以运行起来.[ ...

  8. 2PC(两阶段提交)【XA 与 Seata方案】

    更多内容,前往 IT-BLOG 一.概述 2PC(two phase commit protocol,2PC)即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase).提 ...

  9. 德国坦克傲龙7.1PCIe | 魔音师 声源PCIe MaX 声卡驱动皮肤

    适用于德国坦克傲龙7.1PCIe和魔音师 声源PCIe MaX 声卡驱动皮肤的皮肤. 皮肤使用方法:退出声卡驱动程序(托盘图标右键退出),之后删除声卡驱动目录里面的TERRATECAudioCente ...

  10. Windows的压缩文件夹(zip/cab)

    https://weibo.com/1114096665/DtHXgvnva #windows10# 硬要把zip.cab文件当文件夹,不爽怎么解决? 删除注册表 "HKEY_CLASSES ...