winfrom创建转圈等待窗体
第一步:创建一个WaitForm
public partial class WaitForm : Form
{
private int count = -;
private ArrayList images = new ArrayList();
public Bitmap[] bitmap = new Bitmap[];
private int _value = ;
private Color _circleColor = Color.Red;
private float _circleSize = 0.8f;
private bool disposed = false;
public WaitForm()
{
InitializeComponent();
Instance = this;
ShowInTaskbar = false;
} public Color CircleColor
{
get { return _circleColor; }
set
{
_circleColor = value;
Invalidate();
}
} public float CircleSize
{
get { return _circleSize; }
set
{
if (value <= 0.0F)
_circleSize = 0.05F;
else
_circleSize = value > 4.0F ? 4.0F : value;
Invalidate();
}
} public Bitmap DrawCircle(int j)
{
const float angle = 360.0F / ; Bitmap map = new Bitmap(, );
Graphics g = Graphics.FromImage(map); g.TranslateTransform( / 2.0F, / 2.0F);
g.RotateTransform(angle * _value);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.AntiAlias;
int[] a = new int[] { , , , , , , , };
for (int i = ; i <= ; i++)
{
int alpha = a[(i + j - ) % ];
Color drawColor = Color.FromArgb(alpha, _circleColor);
using (SolidBrush brush = new SolidBrush(drawColor))
{
float sizeRate = 3.5F / _circleSize;
float size = / ( * sizeRate); float diff = ( / 10.0F) - size; float x = ( / 80.0F) + diff;
float y = ( / 80.0F) + diff;
g.FillEllipse(brush,x,y, size, size);
g.RotateTransform(angle);
}
}
return map;
} public void Draw()
{
for (int j = ; j < ; j++)
{
bitmap[ - j] = DrawCircle(j);
}
}
protected override void OnResize(EventArgs e)
{
SetNewSize();
base.OnResize(e);
} protected override void OnSizeChanged(EventArgs e)
{
SetNewSize();
base.OnSizeChanged(e);
} private void SetNewSize()
{
int size = Math.Max(Width, Height);
Size = new Size(size, size);
} public void set()
{
for (int i = ; i < ; i++)
{
Draw(); //Bitmap map = new Bitmap((bitmap[i]), new Size(300, 300)); images.Add(bitmap[i]);
}
pictureBoxWait.Image = (Image)images[];
pictureBoxWait.Size = pictureBoxWait.Image.Size; }
private void pictureBox_Click(object sender, EventArgs e)
{
this.Visible = false;
base.Dispose();
} private void Timer_Tick(object sender, EventArgs e)
{
Invoke(new Action(() =>
{
foreach (Bitmap item in bitmap)
{
if (item != null)
{
item.Dispose();
}
}
images.Clear();
set();
count = (count + ) % ;
pictureBoxWait.Image = (Image)images[count];
})); }
public void ShowForm()
{
Invoke(new Action(() =>
{
Activate();
Show();
}));
}
public void StopWait()
{
Invoke(new Action(() => { Hide(); })); }
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
base.Dispose();
}
public static WaitForm Instance = null;
private void WaitForm_Load(object sender, EventArgs e)
{
Invoke(new Action(() =>
{ pictureBoxWait.Left = Width / - ;
pictureBoxWait.Top = Height / - ;
pictureBoxWait.Width = ;
pictureBoxWait.Height = ;
})); } private void WaitForm_KeyDown(object sender, KeyEventArgs e)
{
Invoke(new Action(() =>
{
if (e.KeyCode == Keys.T)
{
this.Close();
}
})); }
}
第二步:使用方法
在MainForm 初始化地方开启线程调用
tdWait = new Thread(() => { Application.Run(new WaitForm()); });
tdWait.IsBackground = true;
tdWait.Start();
第三步:在需要使用的地方使用
WaitForm.Instance.ShowForm();
AppointModels appModels = new AppointModels();
ResultModels result = HISManager.DownloadAppointData(JsonConvert.SerializeObject(appModels));
WaitForm.Instance.StopWait();
第四步:在MainForm Close 的地方关闭线程
if (tdWait != null)
{
tdWait.Abort();
tdWait = null;
}
winfrom创建转圈等待窗体的更多相关文章
- Winfrom 实现转圈等待
1.放弃进度条.动态进度图片等方式实现用户体验优化方式(主要是优化用户等待体验),建议使用方式? 答:对于From或者Control而言,其提供了Cursor属性设置即可. 例如: this.Curs ...
- C#中的“等待窗体”对话框
这篇文章向您展示了如何在c#.net Windows窗体应用程序中创建一个等待窗体对话框.创建一个新表单,然后输入您的表单名称为frmWaitForm.接下来,将Label,Progress Bar控 ...
- [译]NeHe教程 - 创建一个OpenGL窗体
原文: Setting Up An OpenGL Window 欢迎阅读我的OpenGL教程.我是一个热爱OpenGL的普通码农!我第一次听到OpenGL是在3Dfx刚发布他们给Voodoo I显卡的 ...
- 【C#】分享带等待窗体的任务执行器一枚
-------------201504161039更新------------- 更新内容: IWaitForm接口删除System.Windows.Forms.DialogResult Dialog ...
- Devexpress 等待窗体
加载窗体以及等待窗体 程序加载时,需要等待加载完成后在显示 窗体显示顺序 1. 给用户看的等待窗体 2. 加载完成后的主窗体 代码如下: 1. 等待窗体代码 #region using using S ...
- 【C#】带等待窗体的BackgroundWorker
---------------201504170911更新--------------- 更新内容:删除bgwUI新增的Start方法,改为通过new修饰符+可选参数的方式同时覆盖基类(Backgro ...
- c# winForm 等待窗体的实现
最近在做一个项目,需要用到等待窗体,在DevExpress下面有SplashScreen控件可以使用,同时也有ProgressIndicator控件能用,但是如果没有用Dev开发的话,我们就需要自定义 ...
- PyQt5创建第一个窗体(正规套路)
一.Pyqt5 创建第一个窗体 很多人写窗体程序都是直接敲代码,不使用设计器,我个人不是很赞成这种做法.使用设计器的好处是直观.维护方便,尤其开发复杂窗体的效率高. 但是每次修改ui文件后,需要重新生 ...
- C#关于等待窗体(转)
c#.net 中如果想在主窗口A里点击打开新窗口B(因为要数据库操作,Bload需一小段时间)之前弹出带有滚动条等待子窗口C来提示用户没有死机,应该怎么做?我用多线程打开了c窗口,但是问题:1.C窗口 ...
随机推荐
- SqlServer 跨库访问
同实例跨库 只需要 库名.dbo.表 dbo可省略 如: use Test select * from rdrecords select * from oa.dbo.UserInfo 不同实例与不同i ...
- Python面试题之“猴子补丁”(monkey patching)指的是什么?这种做法好吗?
“猴子补丁”就是指,在函数或对象已经定义之后,再去改变它们的行为. 举个例子: import datetime datetime.datetime.now = lambda: datetime.dat ...
- 【linux】centos6/7 + nginx 利用certbot 申请https证书
没错我又踩坑了.昨晚上搞到十二点半才成功申请.鬼知道OJ服务器是个什么渣渣. 早上才算正式弄好,中间也学了不少东西,记录一下.这次是http转https,所以默认的还是只有80端口. 请务必确保自己的 ...
- SQL Server 2014 中新建登录及权限分配【界面版】
本篇经验将和大家介绍分配SQL Server 2014 中,新建登录用户,分配权限,并指定该用户的数据库的方法,希望对大家的工作和学习有所帮助! 方法/步骤 1 打开 MS SQL Server Ma ...
- 关于JDK,tomcat,eclipse的配置
1.下载安装JDK 在自定义安装路径时,jdk和之后的jre文件夹是属于平行结构,我的安装路径为:D:\jdk\jdk1.6.0_43和D:\jdk\jre6 然后是对环境变量的配置, 计算机→属性→ ...
- Python之os.path.join()
os.path.join()函数用于路径拼接文件路径. os.path.join()函数中可以传入多个路径: 会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃. 以上一种情况为先.在上一种情况 ...
- tac - 反转显示文件
总览 (SYNOPSIS) ../src/tac [OPTION]... [FILE]... 描述 (DESCRIPTION) 把 每个 文件 FILE 显示在 标准输出, 后面 的 行 放在 前面. ...
- OpenGL学习——绘制第一个三角形
终于把三角形绘制出来了,首先一些关键概念.操作. Vertex Data 顶点数据 VBO Vertex Buffer Objects 顶点缓冲对象 VA ...
- Navicat定时 同步数据库
转载:https://www.cnblogs.com/DFX339/p/11646812.html 我是用在了 mysql 和 sql server 数据同步(操作一模一样) 好文章,简单粗暴.适合我 ...
- codeforces847J Students Initiation 网络流
题目传送门 题意: 有n个人,m对关系,要求每对关系中,有且仅有一个人给另外一个人送礼物,并且使送出礼物最多的人送的礼物尽可能少.并输出送礼物的方案. 思路:这道题麻烦的是网络流模型的转换(废话). ...