(八十八)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 点个星星吧