winform 类似QQ的弹出消息窗口
由于项目需要 要求在右下角弹出个消息窗口 样子如下:
通过网上找资料,这里暂时只用较为简单的方式来弹出提示窗口,就是从最下面慢慢的往上移动,关闭时慢慢的往下移动。
首先,弹出form页面的样式就是这样了:
可以自己调,这里我通过2个LinkLabel来显示提示信息,因为项目里需要,实际上一个就够用了,不过没法子,老大非要两个提示放一起。
这里的LinkLabel是可以换行的
下面的秒数其实就是一个label,这个通过timer2来控制动态变化。
然后就是3个Timer来分别控制载入、停留、关闭三种效果
第二个Timer频率设为1000毫秒,就是1秒钟,来控制上面的秒数Label变化。
第三个Timer频率设为10毫秒,来控制关闭效果。
页面上基本就这些,然后就是后台代码:
1 2 3 4 5 6 | #region 参数变量 private pj.BLL.BPJWarn bll = new pj.BLL.BPJWarn(); private int seconds; //页面停留秒数 private Point loc; //页面当前的位置 private int speed = 10; //调整速度的 越大越快 #endregion |
这里seconds主要是用来控制秒数
loc主要控制页面当前的位置,speed主要控制页面移动速度的。
1 2 3 4 5 6 7 | #region load事件 private void PJWarnTiShi_Load( object sender, EventArgs e) { TiShi(); this .seconds = 60; //页面停留秒数 this .lbltime.Text = "60" ; this .loc = new Point(Screen.PrimaryScreen.WorkingArea.Width - this .Width, Screen.PrimaryScreen.WorkingArea.Height); //起始位置 |
1 2 3 4 5 | this .Location = this .loc; this .timer1.Start(); this .timer2.Enabled = false ; this .timer3.Enabled = false ; } |
这里的TiShi()就是显示提示信息
seconds初始化为60,lbltime就是前面的秒数label
在页面加载的时候让timer1开始运行
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void timer1_Tick( object sender, EventArgs e) { if ( this .loc.Y > Screen.PrimaryScreen.WorkingArea.Height - this .Height) { this .loc = new Point( this .loc.X, this .loc.Y - this .speed); this .Location = this .loc; } else { this .timer1.Stop(); this .timer2.Start(); } } |
对timer1加个Tick事件,由于timer1设置频率为10毫秒,那么每隔10毫秒就会触发这个Tick事件。
当form全部显示在最下方时就将timer1停止,timer2启动
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void timer2_Tick( object sender, EventArgs e) { if ( this .seconds > 0) { this .seconds--; this .lbltime.Text = this .seconds.ToString(); } else { this .timer2.Stop(); this .timer3.Start(); } } |
timer2也加个tick事件,用来控制停留时的秒数变化。当秒数由60减到0后,timer2将关闭,启动timer3.
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void timer3_Tick( object sender, EventArgs e) { if ( this .loc.Y < Screen.PrimaryScreen.WorkingArea.Height) { this .loc = new Point( this .loc.X, this .loc.Y + this .speed); this .Location = this .loc; } else { this .timer3.Stop(); this .Close(); } } |
timer3用来控制页面往下移动,当移动到最下方时timer3停止,同时页面关闭。
在form里我加了个暂停LinkLabel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private int Lbtn_judge = 1; //为1显示暂停 为0显示继续 private void linkLabel3_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e) { if (Lbtn_judge == 1) { this .timer2.Enabled = false ; this .linkLabel3.Text = "[继续]" ; this .Lbtn_judge = 0; } else { this .timer2.Enabled = true ; this .linkLabel3.Text = "[暂停]" ; this .Lbtn_judge = 1; } } |
点暂停时timer2的Enabled为false,表示暂停,
点继续时timer2的Enabled为true,表示秒数继续走。
form里还有个关闭LinkLabel
1 2 3 4 5 | private void linkLabel4_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e) { this .timer2.Stop(); this .timer3.Start(); } |
当秒数还没减到0时,点击关闭直接停止timer2,启动timer3.
基本的代码就这些 这只是简单的功能。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥