当前位置:首页 > 编程笔记 > 正文
已解决

C# Winform自定义Switch控件

来自网友在路上 11068106提问 提问时间:2023-11-09 13:23:26阅读次数: 106

最佳答案 问答题库1068位专家为你答疑解惑

1、创建Switch控件
在控件库中添加用户控件(Window窗体),控件名UcSwitch;
在属性/布局栏中的Size设置为70,30。
2、修改UcSwitch.cs

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 UcLib
{[DefaultEvent("CheckedChanged")]public partial class UcSwitch : UserControl{public UcSwitch(){InitializeComponent();//this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);//this.SetStyle(ControlStyles.DoubleBuffer, true);//this.SetStyle(ControlStyles.ResizeRedraw, true);//this.SetStyle(ControlStyles.Selectable, true);//this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);//this.SetStyle(ControlStyles.UserPaint, true);this.MouseDown += UcSwitch_MouseDown;Texts=new string[2] { "开","关"};}[Description("选中改变事件"), Category("自定义")]public event EventHandler CheckedChanged;private Color m_trueColor = Color.FromArgb(34, 163, 169);[Description("选中时颜色"), Category("自定义")]public Color TrueColor{get { return m_trueColor; }set{m_trueColor = value;Refresh();}}private Color m_falseColor = Color.FromArgb(111, 122, 126);[Description("没有选中时颜色"), Category("自定义")]public Color FalseColor{get { return m_falseColor; }set{m_falseColor = value;Refresh();}}private bool m_checked;[Description("是否选中"), Category("自定义")]public bool Checked{get { return m_checked; }set{m_checked = value;Refresh();if (CheckedChanged != null){CheckedChanged(this, null);}}}private string[] m_texts;[Description("文本值,当选中或没有选中时显示,必须是长度为2的数组"), Category("自定义")]public string[] Texts{get { return m_texts; }set{m_texts = value;Refresh();}}public override Font Font{get{return base.Font;}set{base.Font = value;Refresh();}}void UcSwitch_MouseDown(object sender, MouseEventArgs e){Checked = !Checked;}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);var g = e.Graphics;//设置呈现质量g.SmoothingMode = SmoothingMode.AntiAlias;var fillColor = m_checked ? m_trueColor : m_falseColor;GraphicsPath path = new GraphicsPath();path.AddLine(new Point(this.Height / 2, 1), new Point(this.Width - this.Height / 2, 1));path.AddArc(new Rectangle(this.Width - this.Height - 1, 1, this.Height - 2, this.Height - 2), -90, 180);path.AddLine(new Point(this.Width - this.Height / 2, this.Height - 1), new Point(this.Height / 2, this.Height - 1));path.AddArc(new Rectangle(1, 1, this.Height - 2, this.Height - 2), 90, 180);g.FillPath(new SolidBrush(fillColor), path);string strText = string.Empty;if (m_texts != null && m_texts.Length == 2){if (m_checked){strText = m_texts[0];}else{strText = m_texts[1];}}if (m_checked){g.FillEllipse(Brushes.White, new Rectangle(this.Width - this.Height - 1 + 2, 1 + 2, this.Height - 2 - 4, this.Height - 2 - 4));if (string.IsNullOrEmpty(strText)){g.DrawEllipse(new Pen(Color.White, 2), new Rectangle((this.Height - 2 - 4) / 2 - ((this.Height - 2 - 4) / 2) / 2, (this.Height - 2 - (this.Height - 2 - 4) / 2) / 2 + 1, (this.Height - 2 - 4) / 2, (this.Height - 2 - 4) / 2));}else{System.Drawing.SizeF sizeF = g.MeasureString(strText.Replace(" ", "A"), Font);int intTextY = (this.Height - (int)sizeF.Height) / 2 + 2;g.DrawString(strText, Font, Brushes.White, new Point((this.Height - 2 - 4) / 2, intTextY));}}else{g.FillEllipse(Brushes.White, new Rectangle(1 + 2, 1 + 2, this.Height - 2 - 4, this.Height - 2 - 4));if (string.IsNullOrEmpty(strText)){g.DrawEllipse(new Pen(Color.White, 2), new Rectangle(this.Width - 2 - (this.Height - 2 - 4) / 2 - ((this.Height - 2 - 4) / 2) / 2, (this.Height - 2 - (this.Height - 2 - 4) / 2) / 2 + 1, (this.Height - 2 - 4) / 2, (this.Height - 2 - 4) / 2));}else{System.Drawing.SizeF sizeF = g.MeasureString(strText.Replace(" ", "A"), Font);int intTextY = (this.Height - (int)sizeF.Height) / 2 + 2;g.DrawString(strText, Font, Brushes.White, new Point(this.Width - 2 - (this.Height - 2 - 4) / 2 - ((this.Height - 2 - 4) / 2) / 2 - (int)sizeF.Width / 2, intTextY));}}}}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C# Winform自定义Switch控件":http://eshow365.cn/6-36225-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!