winform 类似QQ的弹出消息窗口

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

image

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

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

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

这里的LinkLabel是可以换行的

image

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

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

 

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

image

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

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

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

 

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

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

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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启动

1
2
3
4
5
6
7
8
9
10
11
12
13
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

1
2
3
4
5
private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    this.timer2.Stop();
    this.timer3.Start();
}

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

 

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

posted @   恋醉梦  阅读(1123)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示