C#顶部动态弹出小窗口

效果

优点

  1. 自上而下延时弹出窗口
  2. 窗口有阴影效果
  3. 可在父窗口中任意简单的改变提示的内容
  4. 背景图片可以改变 但是每一个弹窗对象只能固定一个背景
    缺点
  5. 不能改变弹窗大小,需要更换背景图片才行
  6. 弹窗大小随背景图片的大小而改变 不能固定大小
  7. 弹出窗口的移动路径上不能有其他控件存在 不然显示会出现问题

点击按钮1弹出”加载中“
在这里插入图片描述
点击按钮2 弹出”加载成功“
在这里插入图片描述

用法

在这里插入图片描述

控件代码

命名空间

using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
using System.Threading;

代码

    public class TransparentPanel : Panel
    {
        Label Label1 = new Label();
        //新建一个线程用于多线程制作延时效果
        BackgroundWorker _demoBGWorker = new BackgroundWorker();
        //记录用户 规定的弹窗最后出现的位置
        int y;
        int x;
        //弹出窗口的下落开始的位置
        int begin_pos;
        //弹出窗口的隐藏标志当index=100的时候隐藏弹出窗口
        int index = 0;
        public TransparentPanel(int X,int Y,string filePath)
        {
            x = X;
            y = Y;
            begin_pos = Y - 10;
            this.Location = new Point(x, begin_pos);
            this.BackgroundImage = Image.FromFile(filePath);
            this.Size = new Size(this.BackgroundImage.Width, this.BackgroundImage.Height);
            this.Visible = false;

            Label1.Text = "NULL";
            Label1.Location = new Point(55, 36);
            Label1.AutoSize = true;
            Label1.Font = new Font("微软雅黑", 15);
            Label1.BackColor = Color.White;
            this.Controls.Add(Label1);


            _demoBGWorker.DoWork += BGWorker_DoWork;
            _demoBGWorker.WorkerReportsProgress = true;
            _demoBGWorker.ProgressChanged += BGWorker_ProgressChanged;
            _demoBGWorker.WorkerSupportsCancellation = true;
        }

        #region 多线程操作函数
        public void action(string Tips)
        {
            Label1.Text = Tips;
            Label1.Location = new Point(this.Width/2 - Label1.Width/2, this.Height/2-Label1.Height/2-3);
            if (this.Visible != true)
            {
                this.Visible = true;
                _demoBGWorker.RunWorkerAsync();
            }
        
        }
        private void BGWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bgWorker = sender as BackgroundWorker;
            for (int i = begin_pos; true; i++)
            {
                bgWorker.ReportProgress(i);
                Thread.Sleep(1);
                if (bgWorker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
            }
        }
        private void BGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            int kk = e.ProgressPercentage;
            if (kk < y)
            {
                this.Location = new Point(x,kk);
            }
            if (kk >= y)
            {
                index++;
                if (index >= 100)
                {
                    index = 0;
                    this.Visible = false;
                    _demoBGWorker.CancelAsync();
                    this.Location = new Point(x, 0);
                }
            }
            

        }
        #endregion

        #region 透明背景配置
        protected override void OnPaintBackground(PaintEventArgs e) { }
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
                return cp;
            }
        }
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            if (BackgroundImage != null) e.Graphics.DrawImage(this.BackgroundImage, new Point(0, 0));
        }
        #endregion

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值