這篇文章將為大家詳細講解有關C#如何實現(xiàn)簡單的loading提示控件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司服務項目包括綏棱網(wǎng)站建設、綏棱網(wǎng)站制作、綏棱網(wǎng)頁制作以及綏棱網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,綏棱網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到綏棱省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
自己畫一個轉圈圈的控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ExerciseUIPrj.controls
{
public partial class LoadControl : Control
{
Color beginColor = Color.Blue;
Color endColor = Color.Red;
int wid = 10;
int curindex = 0;
Timer timer;
int instervel = 200;
string loadStr = "loading....";
public LoadControl()
{
InitializeComponent();
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer, true);
this.MinimumSize = new Size(40, 80);
if (!DesignMode)
{
Start();
}
}
public void Start()
{
if (timer == null)
{
timer = new Timer();
timer.Interval = instervel;
timer.Tick += Timer_Tick;
}
timer.Enabled = true;
}
public void Stop()
{
if (timer != null)
{
timer.Enabled = false;
}
}
void Timer_Tick(object sender, EventArgs e)
{
curindex++;
curindex = curindex >= wid ? 0 : curindex;
Refresh();
}
//計算各種圈圈相關
Point getPoint(double d, double r, Point center)
{
int x = (int)(r * Math.Cos(d * Math.PI / 180.0));
int y = (int)(r * Math.Sin(d * Math.PI / 180.0));
return new Point(center.X + x, center.Y - y);
}
GraphicsPath getPath(Point a, Point b)
{
Point c, d, e, f;
int h = 2;
Vertical(a, b, h, out c, out d);
Vertical(b, a, h, out e, out f);
GraphicsPath path = new GraphicsPath();
path.AddPolygon(new Point[] { c, d, e, f });
path.CloseAllFigures();
return path;
}
bool Vertical(Point pointa, Point pointb, double R, out Point pointc, out Point pointd)
{
pointc = new Point();
pointd = new Point();
try
{
//(X-xa)^2+(Y-ya)^2=R*R 距離公式
//(X-xa)*(xb-xa)+(Y-ya)*(yb-ya)=0 垂直
//解方程得兩點即為所求點
var cx = pointa.X - (pointb.Y - pointa.Y) * R / Distance(pointa, pointb);
var cy = pointa.Y + (pointb.X - pointa.X) * R / Distance(pointa, pointb);
var dx = pointa.X + (pointb.Y - pointa.Y) * R / Distance(pointa, pointb);
var dy = pointa.Y - (pointb.X - pointa.X) * R / Distance(pointa, pointb);
pointc = new Point((int)cx, (int)cy);
pointd = new Point((int)dx, (int)dy);
return true;
}
catch
{
//如果A,B兩點重合會報錯,那樣就返回false
return false;
}
}
double Distance(double xa, double ya, double xb, double yb)
{
double L;
L = Math.Sqrt(Math.Pow(xa - xb, 2) + Math.Pow(ya - yb, 2));
return L;
}
double Distance(Point pa, Point pb)
{
return Distance(pa.X, pa.Y, pb.X, pb.Y);
}
GraphicsPath getPath(double d, double r, Point c)
{
var p1 = getPoint(d, r / 2.0, c);
var p2 = getPoint(d, r, c);
return getPath(p1, p2);
}
//算漸變色
Color[] getColors()
{
int dr = (int)((endColor.R - beginColor.R) / (double)wid);
int dg = (int)((endColor.G - beginColor.G) / (double)wid);
int db = (int)((endColor.B - beginColor.B) / (double)wid);
List<Color> colors = new List<Color>();
for (int i = 0; i < wid; i++)
{
colors.Add(Color.FromArgb(beginColor.R + dr * i, beginColor.G + dg * i, beginColor.B + db * i));
}
return colors.ToArray();
}
//畫圈圈
void drawRect(Graphics g)
{
int r = (int)(Size.Height / 2.0);
Point center = new Point(r, r);
var colors = getColors();
int findex = curindex;
for (int i = 0; i < wid; i++)
{
double d = (360.0 / wid) * i;
var p = getPath(d, r, center);
int cindex = findex + i;
cindex = cindex >= wid ? cindex - wid : cindex;
g.FillPath(new SolidBrush(colors[cindex]), p);
}
}
//畫字符串
void drawString(Graphics g)
{
if (Size.Height >= Size.Width) return;
Rectangle rect = new Rectangle(new Point(Size.Height, 0), new Size(Size.Width - Size.Height, Size.Height));
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
g.DrawString(loadStr, Font, Brushes.Black, rect,sf);
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
Graphics g = pe.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
drawRect(g);
drawString(g);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
if (Size.Height > Size.Width)
{
Size = new Size(Size.Height, Size.Height);
}
}
}
}C#是一個簡單、通用、面向對象的編程語言,它由微軟Microsoft開發(fā),繼承了C和C++強大功能,并且去掉了一些它們的復雜特性,C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程從而成為.NET開發(fā)的首選語言,但它不適用于編寫時間急迫或性能非常高的代碼,因為C#缺乏性能極高的應用程序所需要的關鍵功能。
關于“C#如何實現(xiàn)簡單的loading提示控件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
網(wǎng)站欄目:C#如何實現(xiàn)簡單的loading提示控件
文章轉載:http://www.chinadenli.net/article22/igjijc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站收錄、、商城網(wǎng)站、外貿建站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)