• (八十八)c#Winform自定义控件-转子


    官网

    http://www.hzhcontrols.com/

    前提

    入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

    如果觉得写的还行,请点个 star 支持一下吧

    欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

    来都来了,点个【推荐】再走吧,谢谢

    NuGet

    Install-Package HZH_Controls

    目录

    http://www.hzhcontrols.com/blog-63.html

    用处及效果

     准备工作

    也没什么准备的,开撸

    开始

    添加一个用户控件UCRotor

    添加一下属性

     1  private Color rotorColor = Color.Black;
     2 
     3         public Color RotorColor
     4         {
     5             get { return rotorColor; }
     6             set
     7             {
     8                 rotorColor = value;
     9                 Refresh();
    10             }
    11         }
    12 
    13         RotorAround rotorAround = RotorAround.None;
    14         int jiaodu = 0;
    15         public RotorAround RotorAround
    16         {
    17             get { return rotorAround; }
    18             set
    19             {
    20                 rotorAround = value;
    21                 if (value == RotorAround.None)
    22                 {
    23                     timer1.Enabled = false;
    24                     jiaodu = 0;
    25                     Refresh();
    26                 }
    27                 else
    28                     timer1.Enabled = true;
    29             }
    30         }
    31         private int speed = 100;
    32 
    33         [Description("旋转速度,100-1000,值越小 速度越快"), Category("自定义")]
    34         public int Speed
    35         {
    36             get { return speed; }
    37             set
    38             {
    39                 if (value < 100 || value > 1000)
    40                     return;
    41                 speed = value;
    42                 timer1.Interval = value;
    43             }
    44         }

    大小改变事件处理一下

    1 void UCRotor_SizeChanged(object sender, EventArgs e)
    2         {
    3             maxWidth = Math.Min(this.Width, this.Height);
    4             one = maxWidth / 10;
    5             ResetPathCache();
    6 
    7         }

    然后就是重绘了

     1  protected override void OnPaint(PaintEventArgs e)
     2         {
     3             base.OnPaint(e);
     4             var g = e.Graphics;
     5             this.Region = new System.Drawing.Region(lstCachePath[jiaodu]);
     6             g.TranslateTransform(Width / 2, Height / 2);
     7             // 旋转画板
     8             g.RotateTransform(jiaodu);
     9             // 回退画板x,y轴移动过的距离
    10             g.TranslateTransform(-(Width / 2), -(Height / 2));
    11             g.FillEllipse(new SolidBrush(rotorColor), new Rectangle((this.Width - maxWidth) / 2+5, (this.Height - maxWidth) / 2 + maxWidth / 4 + maxWidth / 8+2, maxWidth / 2-5, maxWidth / 2 - maxWidth / 4-4));
    12             g.FillEllipse(new SolidBrush(rotorColor), new Rectangle(this.Width / 2, (this.Height - maxWidth) / 2 + maxWidth / 4 + maxWidth / 8+2, maxWidth / 2-5, maxWidth / 2 - maxWidth / 4-4));
    13             g.FillEllipse(new SolidBrush(rotorColor), new Rectangle((this.Width - maxWidth) / 2 + maxWidth / 2 - maxWidth / 8, (this.Height - maxWidth) / 2 + maxWidth / 2 - maxWidth / 8, maxWidth / 4, maxWidth / 4));
    14             g.FillEllipse(new SolidBrush(Color.FromArgb(10, Color.White)), new Rectangle((this.Width - maxWidth) / 2 + maxWidth / 2 - maxWidth / 8, (this.Height - maxWidth) / 2 + maxWidth / 2 - maxWidth / 8, maxWidth / 4, maxWidth / 4));
    15 
    16         }

    添加一个Timer用以旋转

     1 private void timer1_Tick(object sender, EventArgs e)
     2         {
     3             if (rotorAround == RotorAround.Clockwise)
     4             {
     5                 jiaodu += 15;
     6                 if (jiaodu == 180)
     7                     jiaodu = 0;
     8             }
     9             else if (rotorAround == RotorAround.Counterclockwise)
    10             {
    11                 jiaodu -= 15;
    12                 if (jiaodu < 0)
    13                     jiaodu = 165;
    14             }
    15 
    16             Refresh();
    17         }

    最后的话

    如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧

  • 相关阅读:
    港股通不得不了解的汇率问题
    Red and Black(红与黑)BFS
    什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)
    (最详细解答) 问题 B: DFS or BFS?
    HDU 2181 哈密顿绕行世界问题 (dfs)
    codeup 算法笔记【递归入门】组合+判断素数
    DFS--基本入门模板 和 例题 (绝对入门) (最全)
    福州大学在线测评系统 FZU 1013 RP Game
    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 C Thinking Bear magic
    ACM 数论-博弈 (比赛用)
  • 原文地址:https://www.cnblogs.com/bfyx/p/12902333.html
Copyright © 2020-2023  润新知