博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winform 类似QQ的弹出消息窗口
阅读量:4566 次
发布时间:2019-06-08

本文共 3397 字,大约阅读时间需要 11 分钟。

由于项目需要 要求在右下角弹出个消息窗口 样子如下:

通过网上找资料,这里暂时只用较为简单的方式来弹出提示窗口,就是从最下面慢慢的往上移动,关闭时慢慢的往下移动。

首先,弹出form页面的样式就是这样了:

可以自己调,这里我通过2个LinkLabel来显示提示信息,因为项目里需要,实际上一个就够用了,不过没法子,老大非要两个提示放一起。

这里的LinkLabel是可以换行的

可以通过来调整是否可以换行。

下面的秒数其实就是一个label,这个通过timer2来控制动态变化。

 

然后就是3个Timer来分别控制载入、停留、关闭三种效果

第一个Timer频率设10毫秒,来控制载入效果。

第二个Timer频率设为1000毫秒,就是1秒钟,来控制上面的秒数Label变化。

第三个Timer频率设为10毫秒,来控制关闭效果。

 

页面上基本就这些,然后就是后台代码:

#region 参数变量          private pj.BLL.BPJWarn bll = new pj.BLL.BPJWarn();         private int seconds;//页面停留秒数          private Point loc;//页面当前的位置          private int speed = 10;//调整速度的 越大越快        #endregion

这里seconds主要是用来控制秒数

loc主要控制页面当前的位置,speed主要控制页面移动速度的。

#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);//起始位置
this.Location = this.loc;            this.timer1.Start();            this.timer2.Enabled = false;            this.timer3.Enabled = false;        }

这里的TiShi()就是显示提示信息

seconds初始化为60,lbltime就是前面的秒数label

在页面加载的时候让timer1开始运行

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启动

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.

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

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

private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)        {            this.timer2.Stop();            this.timer3.Start();        }

当秒数还没减到0时,点击关闭直接停止timer2,启动timer3.

 

基本的代码就这些 这只是简单的功能。

转载于:https://www.cnblogs.com/mjsh/archive/2012/02/22/2362523.html

你可能感兴趣的文章
MFC的多国语言界面的实现
查看>>
四则运算个人项目 最终版
查看>>
java线程系列---java5中的线程池
查看>>
SQL表连接
查看>>
新秀系列C/C++经典问题(四)
查看>>
memset函数具体说明
查看>>
经常使用的android弹出对话框
查看>>
确保新站自身站点设计的合理性的六大注意点
查看>>
promise
查看>>
Go 网络编程笔记
查看>>
[]Java面试题123道
查看>>
中间件与auth认证的那点儿所以然
查看>>
Scala
查看>>
Android 中LinearLayout控件属性
查看>>
面向对象之多态性
查看>>
树状数组
查看>>
【2019.8.14 慈溪模拟赛 T1】我不是!我没有!别瞎说啊!(notme)(BFS+DP)
查看>>
多任务--进程 及 进程间通信
查看>>
多线程/多进程+QProgressBar实现进度条
查看>>
多任务(进程)案例----- 拷贝文件夹
查看>>