当我们关闭QQ的时候,会出现一个提示,弹出一个窗口,询问提示我们是最小化还是退出程序运行。这是一种很人性化的提示操作方式。这篇文章就是要模拟QQ的这种效果,在WinForm中实现。

1、首先创建一个WinForm项目

2、打开Form1窗体设计,设置Form1窗口的FormClosing事件的委托

要在这个方法里边进行关闭提示操作,以及根据用户的选择,进行相应的处理。
3、创建关闭提示的窗体:CloseTipForm

可以选择最小化到系统托盘区,或者退出程序。
还可以记录用户的选择,下次关闭时不再提示,直接进行相应的操作。
关于最小化到系统托盘区的实现不是这篇文章的讨论内容,网上已经介绍很多,请查看:
搜索winform最小化到系统托盘
点击确定时,需要记录用户的选择,在这里我们记录用户的选择到Settings中:

AlwaysCloseAction用于永久记录用户的选择;
CloseAction用于保存用户本次的选择。
看看点击确定操作时,是如何处理的:

这里定义了一个ClickCloseButtonAction的类:
查看源代码
打印?
public class ClickCloseButtonAction |
public static int Tip = 0; |
public static int Min = 1; |
public static int Close = 2; |
public static int Cancel = 3; |
关闭有这么几种选择:提示、最小化、关闭、取消关闭。
4、编写关闭提示程序
创建CloseTipForm好之后,就可以为应用关闭提示的窗体编写相关程序了,这里在前边创建的FormClosing委托方法中编写。
查看源代码
打印?
private void Form1_FormClosing( object sender, FormClosingEventArgs e) |
Settings r = new Settings(); |
if (r.AlwaysCloseAction == ClickCloseButtonAction.Min) //最小化 |
else if (r.AlwaysCloseAction == ClickCloseButtonAction.Close) //关闭 |
else if (r.AlwaysCloseAction == ClickCloseButtonAction.Tip) //提示 |
CloseTipForm form = new CloseTipForm(); |
if (r.CloseAction == ClickCloseButtonAction.Cancel) //取消 |
else if (r.CloseAction == ClickCloseButtonAction.Min) //最小化 |
else if (r.CloseAction == ClickCloseButtonAction.Close) //关闭 |
代码很简单,里边有一个SetWindowMin方法,是自定义的用于最小化窗口。
因为没有提供直接最小化的方法,使用:
this.WindowState = FormWindowState.Minimized
有时不能很好的解决问题,所以调用了一个Windows API来实现。

5、运行效果
做完以上处理,现在基本可以运行了。

Ok,这篇文章就到这里,有些细节没有介绍。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述