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.
基本的代码就这些 这只是简单的功能。





浙公网安备 33010602011771号