這篇文章將為大家詳細(xì)講解有關(guān)C#如何實(shí)現(xiàn)簡(jiǎn)單的loading提示控件,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括綏棱網(wǎng)站建設(shè)、綏棱網(wǎng)站制作、綏棱網(wǎng)頁(yè)制作以及綏棱網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,綏棱網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到綏棱省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
自己畫一個(gè)轉(zhuǎn)圈圈的控件
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(); } //計(jì)算各種圈圈相關(guān) 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 垂直 //解方程得兩點(diǎn)即為所求點(diǎn) 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兩點(diǎn)重合會(huì)報(bào)錯(cuò),那樣就返回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#是一個(gè)簡(jiǎn)單、通用、面向?qū)ο蟮木幊陶Z(yǔ)言,它由微軟Microsoft開發(fā),繼承了C和C++強(qiáng)大功能,并且去掉了一些它們的復(fù)雜特性,C#綜合了VB簡(jiǎn)單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語(yǔ)法風(fēng)格、創(chuàng)新的語(yǔ)言特性和便捷的面向組件編程從而成為.NET開發(fā)的首選語(yǔ)言,但它不適用于編寫時(shí)間急迫或性能非常高的代碼,因?yàn)镃#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能。
關(guān)于“C#如何實(shí)現(xiàn)簡(jiǎn)單的loading提示控件”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)站欄目:C#如何實(shí)現(xiàn)簡(jiǎn)單的loading提示控件
文章轉(zhuǎn)載:http://m.rwnh.cn/article22/igjijc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站收錄、、商城網(wǎng)站、外貿(mào)建站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)