winform 类似QQ的弹出消息窗口
由于项目需要 要求在右下角弹出个消息窗口 样子如下:
通过网上找资料,这里暂时只用较为简单的方式来弹出提示窗口,就是从最下面慢慢的往上移动,关闭时慢慢的往下移动。
首先,弹出form页面的样式就是这样了:
可以自己调,这里我通过2个LinkLabel来显示提示信息,因为项目里需要,实际上一个就够用了,不过没法子,老大非要两个提示放一起。
这里的LinkLabel是可以换行的
下面的秒数其实就是一个label,这个通过timer2来控制动态变化。
然后就是3个Timer来分别控制载入、停留、关闭三种效果
第二个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.
基本的代码就这些 这只是简单的功能。