(八十八)c#Winform自定义控件
官网
欢迎前来交流探讨: 企鹅群568015492
来都来了,点个【推荐】再走吧,谢谢
NuGet
Install-Package HZH_Controls
目录
准备工作
也没什么准备的,开撸
开始
添加一个用户控件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 RotorAround16 {17 get { return rotorAround; }18 set19 {20 rotorAround = value;21 if (value == RotorAround.None)22 {23 timer1.Enabled = false;24 jiaodu = 0;25 Refresh();26 }27 else28 timer1.Enabled = true;29 }30 }31 private int speed = 100;32 33 [Description("旋转速度,100-1000,值越小 速度越快"), Category("自定义")]34 public int Speed35 {36 get { return speed; }37 set38 {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 点个星星吧
没有评论:
发表评论