主要功能:

C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,并使窗体闪烁。

首先:

创建窗体应用程序,并添加控件NotifyIcon及ContextMenuStrip控件

NotifyIcon:点击notifyIcon1属性,为控件属性Icon添加图标

contextMenuStrip1属性,进入Items添加或右键"编辑项".添加4个toolStripMenuItem,设置其Text为"显示窗体"、"隐藏窗体"、"开始闪烁"、"退出"

代码:

点击窗体"关闭"按钮时,取消关闭操作且窗体隐藏,任务栏图标仍然显示:

 //窗体关闭前发生事件  
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true; //取消关闭操作 表现为不关闭窗体  
this.Hide(); //隐藏窗体  
}
}

1.左键点击图标时,显示窗体.
2.当鼠标右键点击图标时,显示"显示窗体"\"隐藏窗体"\"闪烁"\"退出"菜单栏,并有相对应的功能

 //"显示窗体"单击事件
private void 显示ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Show(); //窗体显示  
this.WindowState = FormWindowState.Normal; //窗体状态默认大小  
this.Activate();
}
//"隐藏窗体"单击事件 
private void 隐藏ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Hide();                      //隐藏窗体 
}
//"退出"单击事件 
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
//点击"是(YES)"退出程序  
if (MessageBox.Show("确定要退出程序?", "安全提示",
System.Windows.Forms.MessageBoxButtons.YesNo,
System.Windows.Forms.MessageBoxIcon.Warning)
== System.Windows.Forms.DialogResult.Yes)
{
notifyIcon1.Visible = false; //设置图标不可见  
this.Close(); //关闭窗体  
this.Dispose(); //释放资源  
Application.Exit(); //关闭应用程序窗体  
}
}

鼠标左键图标显示窗体功能

//鼠标左键图标事件
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
//点击鼠标"左键"发生  
if (e.Button == MouseButtons.Left)
{
this.Visible = true; //窗体可见  
this.WindowState = FormWindowState.Normal; //窗体默认大小  
this.notifyIcon1.Visible = true; //设置图标可见  
}
}

图标闪烁

闪烁的效果是加上一个空白的图标,正常图标与空白图标的切换进而实现闪烁的效果。

property是vs的一个资源管理功能,可以存储系统图标及一些常量

private Icon timg = Properties.Resources.timg;
private Icon blank = Properties.Resources.blank;//透明的图标
private bool _status = true;
private bool _isBlink = false;

右键菜单控制图标是不是显示

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
if (_isBlink == false)
{
_isBlink = true;
timer1.Enabled = true;
timer1.Start();
}
else
{
_isBlink = false;
timer1.Stop();
//气泡提示
notifyIcon1.ShowBalloonTip(, "提示", "关闭闪烁效果!", ToolTipIcon.Info);
}
}

定时器中修改图标的状态,定时反转图标

private void timer1_Tick(object sender, EventArgs e)
{ if (_status)
notifyIcon1.Icon = timg;
else
notifyIcon1.Icon = blank; _status = !_status;
}

完整代码:

public partial class Form1 : Form
{
private Icon timg = Properties.Resources.timg;
private Icon blank = Properties.Resources.blank;//透明的图标
private bool _status = true;
private bool _isBlink = false;
public Form1()
{
InitializeComponent();
} //窗体关闭前发生事件  
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true; //取消关闭操作 表现为不关闭窗体  
this.Hide(); //隐藏窗体  
}
}
//"显示窗体"单击事件
private void 显示ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Show(); //窗体显示  
this.WindowState = FormWindowState.Normal; //窗体状态默认大小  
this.Activate();
}
//"隐藏窗体"单击事件 
private void 隐藏ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Hide();                      //隐藏窗体 
}
//"退出"单击事件 
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
//点击"是(YES)"退出程序  
if (MessageBox.Show("确定要退出程序?", "安全提示",
System.Windows.Forms.MessageBoxButtons.YesNo,
System.Windows.Forms.MessageBoxIcon.Warning)
== System.Windows.Forms.DialogResult.Yes)
{
notifyIcon1.Visible = false; //设置图标不可见  
this.Close(); //关闭窗体  
this.Dispose(); //释放资源  
Application.Exit(); //关闭应用程序窗体  
}
}
//鼠标左键图标事件
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
//点击鼠标"左键"发生  
if (e.Button == MouseButtons.Left)
{
this.Visible = true; //窗体可见  
this.WindowState = FormWindowState.Normal; //窗体默认大小  
this.notifyIcon1.Visible = true; //设置图标可见  
}
} private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
if (_isBlink == false)
{
_isBlink = true;
timer1.Enabled = true;
timer1.Start();
}
else
{
_isBlink = false;
timer1.Stop();
//气泡提示
notifyIcon1.ShowBalloonTip(, "提示", "关闭闪烁效果!", ToolTipIcon.Info);
}
}
private void timer1_Tick(object sender, EventArgs e)
{ if (_status)
notifyIcon1.Icon = timg;
else
notifyIcon1.Icon = blank; _status = !_status;
} }

C# 程序启动最小化至任务栏及闪烁的更多相关文章

  1. C# winForm启动最小化到任务栏右侧通知栏并交互操作

    原文链接:http://blog.sina.com.cn/s/blog_45eaa01a01013u36.html C# winForm启动最小化到任务栏右侧通知栏并交互操作 一.主要功能:(1).程 ...

  2. C# winForm 开机自动启动 并启动后最小化到任务栏 右侧通知栏并交互操作

    //设置自动启动 string path = Application.StartupPath; SettingHel.SetAutoRun(path +@"\MostImpressive.D ...

  3. VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)

    之前写的一个VC应用程序,是程序启动时就直接出现在任务栏, 窗体不出现,等用户点击任务栏图标再出现窗口.和一些防火墙什么的软件类似. 这种效果实现并不是很困难的,硬是找不到最好的.为什么呢? 首先,在 ...

  4. delphi如何让程序最小化到任务栏(转)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  5. Delphi如何让程序最小化到任务栏(截取WM_SYSCOMMAND后,调用Shell_NotifyIcon)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  6. C# 设置程序最小化到任务栏右下角,鼠标左键单击还原,右键提示关闭程序

    首先设置程序最小化到任务栏右下角 先给窗口添加一个notifyIcon控件 为notifyIcon控件设置ICO图标(不设置图标将无法在任务栏显示) 给notifyIcon控件添加点击事件 然后是最小 ...

  7. delphi如何让程序最小化到任务栏(使用Shell_NotifyIcon API函数)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  8. 将VMware虚拟机最小化到托盘栏

    版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可.   目录 前言 将VMware最小化到托盘栏的方法 1.下载 Trayconizer 2.解压 trayco ...

  9. 将VMware工作站最小化到托盘栏

    目录 前言 将VMware最小化到托盘栏的方法 1.下载 Trayconizer 2.解压 trayconizerw.zip 3.创建 VMware 快捷方式 4.修改 VMware 快捷方式 5.运 ...

随机推荐

  1. C语言字符串的操作

    C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. ...

  2. springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

    //我的会员中心 头像上传接口 /*windows 调试*/ @Value("${appImg.location}") private String winPathPic; /*l ...

  3. SpringBoot 整合 ActiveMq

    消息队列,用来处理开发中的高并发问题,通过线程池.多线程高效的处理并发任务. 首先,需要下载一个ActiveMQ的管理端:我本地的版本是 activemq5.15.8,打开activemq5.15.8 ...

  4. 3dsmax2015卸载/安装失败/如何彻底卸载清除干净3dsmax2015注册表和文件的方法

    3dsmax2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2015失败提示3dsmax2015安装未完成,某些产品无法安装,也有时候想重新 ...

  5. kafka java API的使用

    Kafka包含四种核心的API: 1.Producer API支持应用将数据流发送到Kafka集群的主题 2.Consumer API支持应用从Kafka集群的主题中读取数据流 3.Streams A ...

  6. Oracle给Select结果集加锁,Skip Locked(跳过加锁行获得可以加锁的结果集)

    1.通过select for update或select for update wait或select for update nowait给数据集加锁 具体实现参考select for update和 ...

  7. MacOS系统下的图形化工具

    MacOS系统下的图形化工具 MacOS系统下安装了Git后,发现如果Git中有中文文档操作还是比较麻烦(需要输入中文的文件名).图形化对Git的操作还是相对于方便一些.所以准备找一个图形化的工具. ...

  8. hibernate 学习笔记3

    1. 多对多关联: 在双方都要用一个类型为Set的属性保存对方的信息,并在映射配置文件中指定这个属性的名字,并指定中间表.还需要通过<key column=””>来指定自己在中间表中对应的 ...

  9. 【c++】iostreeam中的类为何不可以直接定义一个无参对象呢

    缘起 #include <iostream> #include <fstream> #include <sstream> using namespace std; ...

  10. 基于resteasy,Base64码上传文件

    package com.xgt.controller.bs; import com.xgt.bean.bs.VersionBean; import com.xgt.common.BaseControl ...