zoukankan      html  css  js  c++  java
  • 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.

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

  • 相关阅读:
    EasyUI笔记(三)Window窗口
    EasyUI笔记(二)Layout布局
    从零构建Flink SQL计算平台
    从零构建Flink SQL计算平台
    Hystrix压测
    Java对象属性复制备忘
    Java垃圾回收手册翻译
    一次虚拟机升级和参数调整记录
    获取不同虚拟机参数的终极方法
    Dataset数据的XML持久化处理
  • 原文地址:https://www.cnblogs.com/mjsh/p/2362523.html
Copyright © 2011-2022 走看看