C#如何實作loading提示控制項簡單的實例
本文透過實例程式碼介紹了C#實作簡單的loading提示控制功能,程式碼非常簡單,有參考借鏡價值,需要的朋友參考下吧
自己畫一個轉圈圈的控制項
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#如何實作loading提示控制項簡單的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

在前端開發中,我們經常會有一個場景:使用者在與網頁互動過程中需要等待資料的加載,此時通常會有一個loading效果顯示,提醒使用者等待。在Vue框架中,實作一個全域loading效果並不困難,以下我們來介紹如何實作。第一步:建立Vue插件我們可以建立一個名為loading的Vue插件,可以在所有的Vue實例中引用。在外掛程式中,我們需要實作以下兩個方法:s

如果你是.NET開發者,你必須意識到在交付高品質軟體方面,優化功能和效能的重要性。透過熟練使用提供的資源並減少網站載入時間,你不僅為使用者創造了愉快的體驗,還能減少基礎設施成本。

在高並發請求處理方面,.NETASP.NETCoreWebAPI效能優於JavaSpringMVC,原因包括:AOT提前編譯,減少啟動時間;更精細的記憶體管理,由開發人員負責分配和釋放物件記憶體。

C#.NET面試問題和答案包括基礎知識、核心概念和高級用法。 1)基礎知識:C#是微軟開發的面向對象語言,主要用於.NET框架。 2)核心概念:委託和事件允許動態綁定方法,LINQ提供強大查詢功能。 3)高級用法:異步編程提高響應性,表達式樹用於動態代碼構建。

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.
