全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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提示控件实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


# c#  # loading  # 提示控件  # c  # loading控件  # 如何使用C#中的Lazy的使用方法  # C#中的Lazy如何使用详解  # C#基础 延迟加载介绍与实例  # 详解C# Lazy Loading(延迟加载)  # 小编  # 两点  # 给大家  # 报错  # 即为  # 所述  # 给我留言  # 画一  # 有任何  # 渐变色  # Size  # true  # MinimumSize  # Start  # void  # DesignMode  # OptimizedDoubleBuffer  # InitializeComponent  # string 


相关文章: 内网网站制作软件,内网的网站如何发布到外网?  如何快速启动建站代理加盟业务?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何在云指建站中生成FTP站点?  建站之星如何配置系统实现高效建站?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站之星代理费用多少?最新价格详情介绍  建站之星后台密码遗忘如何找回?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何在搬瓦工VPS快速搭建网站?  建站之星如何通过成品分离优化网站效率?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何快速生成高效建站系统源代码?  高端云建站费用究竟需要多少预算?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站之星多图banner生成与模板自定义指南  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  建站之星如何一键生成手机站?  如何通过VPS搭建网站快速盈利?  建站之星如何快速解决建站难题?  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何在Tomcat中配置并部署网站项目?  ,南京靠谱的征婚网站?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  网站制作公司,橙子建站是合法的吗?  ,交易猫的商品怎么发布到网站上去?  北京制作网站的公司,北京铁路集团官方网站?  如何挑选最适合建站的高性能VPS主机?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何获取免费开源的自助建站系统源码?  如何用IIS7快速搭建并优化网站站点?  浅析上传头像示例及其注意事项  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  建站主机数据库如何配置才能提升网站性能?  如何通过VPS建站无需域名直接访问?  个人网站制作流程图片大全,个人网站如何注销?  招商网站制作流程,网站招商广告语?  如何快速搭建二级域名独立网站?  如何在宝塔面板中创建新站点?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何做静态网页,sublimetext3.0制作静态网页?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何通过wdcp面板快速创建网站?  网站微信制作软件,如何制作微信链接?  济南网站制作的价格,历城一职专官方网站?  TestNG的testng.xml配置文件怎么写  公司门户网站制作流程,华为官网怎么做?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何正确下载安装西数主机建站助手? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。