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
指定标识符以指示对话框的返回值。
属性 | 枚举值 | 说明 |
---|---|---|
Abort | 3 | 对话框的返回值是 Abort (通常从标签为“中止”的按钮发送)。 |
Cancel | 2 | 对话框的返回值是 Cancel (通常从标签为“取消”的按钮发送)。 |
Continue | 11 | 对话框返回值是“继续” (通常从标记为“继续”) 的按钮发送。 |
Ignore | 5 | 对话框的返回值是 Ignore (通常从标签为“忽略”的按钮发送)。 |
No | 7 | 对话框的返回值是 No (通常从标签为“否”的按钮发送)。 |
None | 0 | 从对话框返回了 Nothing 。 这表明有模式对话框继续运行。 |
OK | 1 | 对话框的返回值是 OK (通常从标签为“确定”的按钮发送)。 |
Retry | 4 | 对话框的返回值是 Retry (通常从标签为“重试”的按钮发送)。 |
TryAgain | 10 | 对话框返回值是“重试” (通常从标记为“重试”的按钮发送) 。 |
Yes | 6 | 对话框的返回值是 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();
}
}
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 方法的参数。
字段 | 枚举值 | 说明 |
---|---|---|
OK | 0 | 消息框显示“确定”按钮。 |
OKCancel | 1 | 消息框显示“确定”和“取消”按钮。 |
YesNo | 4 | 消息框显示“是”和“否”按钮。 |
YesNoCancel | 3 | 消息框显示“是”、“否”和“取消”按钮。 |
实现步骤
画面组态
添加控件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;
}