winform 类似QQ的弹出消息窗口

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

image

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

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

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

这里的LinkLabel是可以换行的

image

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

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

 

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

image

第一个Timerimage频率设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.

 

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

posted @ 2012-02-22 09:26  恋醉梦  阅读(1081)  评论(0编辑  收藏  举报