效果
优点
- 自上而下延时弹出窗口
- 窗口有阴影效果
- 可在父窗口中任意简单的改变提示的内容
- 背景图片可以改变 但是每一个弹窗对象只能固定一个背景
缺点 - 不能改变弹窗大小,需要更换背景图片才行
- 弹窗大小随背景图片的大小而改变 不能固定大小
- 弹出窗口的移动路径上不能有其他控件存在 不然显示会出现问题
点击按钮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
}