Official website
premise
It's been 7 or 8 years since I started, I always want to make a set of beautiful custom controls, so I have this series of articles.
GitHub: https://github.com/kwwwvagaa/NetWinformControl
Code cloud: https://gitee.com/kwwwvagaa/net_winform_custom_control.git
If you think it's OK, please click star to support it
Welcome to discuss: Penguins 568015492
Here we are. Please order a recommendation before you leave. Thank you
NuGet
Install-Package HZH_Controls
catalog
http://www.hzhcontrols.com/blog-63.html
Use and effect
Preparations
I don't have any preparation. Open it
start
Add a user control UCRotor
Add the following properties
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("Rotation speed, 100-1000,The smaller the value, the faster the speed"), Category("custom")] 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 }
Size change event handling
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 }
And then it's redrawn
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 // Rotate Sketchpad 8 g.RotateTransform(jiaodu); 9 // Back to Sketchpad x,y Distance of axis movement 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 }
Add a Timer to rotate
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 }
Last words
If you like, please https://gitee.com/kwwwvagaa/net_winform_custom_control Point a star