using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mesnac.Controls.ChemicalWeighing { [DefaultEvent("OnSwitchChanged")] [Description("一个开关控件,可以在开关两种状态之间进行选择")] public partial class HslSwitch : UserControl { public HslSwitch() { InitializeComponent(); this.sf = new StringFormat(); this.sf.Alignment = StringAlignment.Center; this.sf.LineAlignment = StringAlignment.Center; base.SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true); base.SetStyle(ControlStyles.ResizeRedraw, true); base.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); base.SetStyle(ControlStyles.AllPaintingInWmPaint, true); base.AutoScaleMode = AutoScaleMode.None; this.BackColor = Color.Transparent; this.Cursor = Cursors.Hand; base.Name = "HslSwitch"; base.ResumeLayout(false); } /// /// 开关按钮发生变化的事件 /// // Token: 0x14000009 RID: 9 // (add) Token: 0x06000775 RID: 1909 RVA: 0x00042DC0 File Offset: 0x00040FC0 // (remove) Token: 0x06000776 RID: 1910 RVA: 0x00042DF8 File Offset: 0x00040FF8 [Category("Action")] [Description("点击了按钮开发后触发")] public event Action OnSwitchChanged; // Token: 0x06000777 RID: 1911 RVA: 0x00042E30 File Offset: 0x00041030 private Point GetCenterPoint(int width, int height) { bool flag = height > width; Point result; if (flag) { result = new Point(width / 2, width / 2); } else { result = new Point(height / 2, height / 2); } return result; } /// /// 获取或设置控件的背景色 /// // Token: 0x17000254 RID: 596 // (get) Token: 0x06000778 RID: 1912 RVA: 0x00042E65 File Offset: 0x00041065 // (set) Token: 0x06000779 RID: 1913 RVA: 0x00042E6D File Offset: 0x0004106D [Browsable(true)] [Description("获取或设置控件的背景色")] [Category("HslControls")] [DefaultValue(typeof(Color), "Transparent")] [EditorBrowsable(EditorBrowsableState.Always)] public override Color BackColor { get { return base.BackColor; } set { base.BackColor = value; } } /// /// 获取或设置开关按钮的背景色 /// // Token: 0x17000255 RID: 597 // (get) Token: 0x0600077A RID: 1914 RVA: 0x00042E78 File Offset: 0x00041078 // (set) Token: 0x0600077B RID: 1915 RVA: 0x00042E90 File Offset: 0x00041090 [Browsable(true)] [Description("获取或设置开关按钮的背景色")] [Category("HslControls")] [DefaultValue(typeof(Color), "DimGray")] public Color SwitchBackground { get { return this.color_switch_background; } set { this.color_switch_background = value; Brush brush = this.brush_switch_background; if (brush != null) { brush.Dispose(); } Pen pen = this.pen_switch_background; if (pen != null) { pen.Dispose(); } this.brush_switch_background = new SolidBrush(this.color_switch_background); this.pen_switch_background = new Pen(this.color_switch_background, 2f); base.Invalidate(); } } /// /// 获取或设置开关按钮的前景色 /// // Token: 0x17000256 RID: 598 // (get) Token: 0x0600077C RID: 1916 RVA: 0x00042EF8 File Offset: 0x000410F8 // (set) Token: 0x0600077D RID: 1917 RVA: 0x00042F10 File Offset: 0x00041110 [Browsable(true)] [Description("获取或设置开关按钮的前景色")] [Category("HslControls")] [DefaultValue(typeof(Color), "[36, 36, 36]")] public Color SwitchForeground { get { return this.color_switch_foreground; } set { this.color_switch_foreground = value; this.brush_switch_foreground = new SolidBrush(this.color_switch_foreground); base.Invalidate(); } } /// /// 获取或设置开关按钮的开合状态 /// // Token: 0x17000257 RID: 599 // (get) Token: 0x0600077E RID: 1918 RVA: 0x00042F34 File Offset: 0x00041134 // (set) Token: 0x0600077F RID: 1919 RVA: 0x00042F4C File Offset: 0x0004114C [Browsable(true)] [Description("获取或设置开关按钮的开合状态")] [Category("HslControls")] [DefaultValue(false)] public bool SwitchStatus { get { return this.switch_status; } set { bool flag = value != this.switch_status; if (flag) { this.switch_status = value; base.Invalidate(); Action onSwitchChanged = this.OnSwitchChanged; if (onSwitchChanged != null) { onSwitchChanged(this, this.switch_status); } } } } /// /// 获取或设置两种开关状态的文本描述,例如:"Off;On" /// // Token: 0x17000258 RID: 600 // (get) Token: 0x06000780 RID: 1920 RVA: 0x00042F94 File Offset: 0x00041194 // (set) Token: 0x06000781 RID: 1921 RVA: 0x00042FAC File Offset: 0x000411AC [Browsable(true)] [Description("获取或设置两种开关状态的文本描述,例如:Off;On")] [Category("HslControls")] [DefaultValue("关;开")] public string SwitchStatusDescription { get { return this.description; } set { this.description = value; base.Invalidate(); } } /// /// 获取或设置当前控件的文本 /// // Token: 0x17000259 RID: 601 // (get) Token: 0x06000782 RID: 1922 RVA: 0x00042FC0 File Offset: 0x000411C0 // (set) Token: 0x06000783 RID: 1923 RVA: 0x00042FD8 File Offset: 0x000411D8 [Browsable(true)] [Description("获取或设置当前控件的文本")] [Category("HslControls")] [EditorBrowsable(EditorBrowsableState.Always)] [Bindable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public override string Text { get { return base.Text; } set { base.Text = value; base.Invalidate(); } } /// /// 获取或设置当前控件的文本的颜色 /// // Token: 0x1700025A RID: 602 // (get) Token: 0x06000784 RID: 1924 RVA: 0x00042FEC File Offset: 0x000411EC // (set) Token: 0x06000785 RID: 1925 RVA: 0x00043004 File Offset: 0x00041204 [Browsable(true)] [Description("获取或设置当前控件的文本的颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "Black")] [EditorBrowsable(EditorBrowsableState.Always)] public override Color ForeColor { get { return this.textForeColor; } set { this.textForeColor = value; this.textForeBrush.Dispose(); this.textForeBrush = new SolidBrush(value); base.Invalidate(); } } /// // Token: 0x06000786 RID: 1926 RVA: 0x00043030 File Offset: 0x00041230 protected override void OnPaint(PaintEventArgs e) { bool flag = false; if (!flag) { e.Graphics.SmoothingMode = SmoothingMode.HighQuality; e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; this.PaintHslControls(e.Graphics, base.Width, base.Height); base.OnPaint(e); } } /// // Token: 0x06000787 RID: 1927 RVA: 0x00043088 File Offset: 0x00041288 public void PaintHslControls(Graphics g, int width, int height) { bool flag = false; if (!flag) { string[] array = this.description.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); string text = string.Empty; string text2 = string.Empty; bool flag2 = array.Length != 0; if (flag2) { text = array[0]; } bool flag3 = array.Length > 1; if (flag3) { text2 = array[1]; } Point centerPoint = this.GetCenterPoint(width, height); g.TranslateTransform((float)centerPoint.X, (float)centerPoint.Y); int num = 45 * (centerPoint.X * 2 - 30) / 130; bool flag4 = num < 5; if (!flag4) { Rectangle rect = new Rectangle(-num - 4, -num - 4, 2 * num + 8, 2 * num + 8); Rectangle rect2 = new Rectangle(-num, -num, 2 * num, 2 * num); g.DrawEllipse(this.pen_switch_background, rect); g.FillEllipse(this.brush_switch_background, rect2); float angle = -36f; bool flag5 = this.switch_status; if (flag5) { angle = 36f; } g.RotateTransform(angle); int num2 = 20 * (centerPoint.X * 2 - 30) / 130; Rectangle rect3 = new Rectangle(-centerPoint.X / 8, -num - num2, centerPoint.X / 4, num * 2 + num2 * 2); g.FillRectangle(this.brush_switch_foreground, rect3); Rectangle rect4 = new Rectangle(-centerPoint.X / 16, -num - 10, centerPoint.X / 8, centerPoint.X * 3 / 8); g.FillEllipse(this.switch_status ? Brushes.LimeGreen : Brushes.Tomato, rect4); Rectangle r = new Rectangle(-50, -num - num2 - 15, 100, 15); g.DrawString(this.switch_status ? text2 : text, this.Font, this.switch_status ? Brushes.LimeGreen : Brushes.Tomato, r, this.sf); g.ResetTransform(); bool flag6 = height - Math.Min(width, height) > 0; if (flag6) { bool flag7 = !string.IsNullOrEmpty(this.Text); if (flag7) { g.DrawString(this.Text, this.Font, this.textForeBrush, new Rectangle(0, Math.Min(width, height) - 15, Math.Min(width, height), height - Math.Min(width, height) + 15), this.sf); } } } } } /// /// 鼠标的点击事件 /// /// 鼠标的点击事件 // Token: 0x06000788 RID: 1928 RVA: 0x00043308 File Offset: 0x00041508 protected override void OnMouseClick(MouseEventArgs e) { bool flag = e.Button == MouseButtons.Left; if (flag) { this.SwitchStatus = !this.SwitchStatus; } base.OnClick(e); } /// /// 通过当前方法来修改控件的状态,而不触发状态改变的事件 /// /// 新增状态值 // Token: 0x06000789 RID: 1929 RVA: 0x00043341 File Offset: 0x00041541 public void ChangeSwitchStatus(bool status) { this.switch_status = status; base.Invalidate(); } // Token: 0x040003B0 RID: 944 private Color textForeColor = Color.Black; // Token: 0x040003B1 RID: 945 private Brush textForeBrush = new SolidBrush(Color.Black); // Token: 0x040003B2 RID: 946 private Color color_switch_background = Color.DimGray; // Token: 0x040003B3 RID: 947 private Brush brush_switch_background = new SolidBrush(Color.DimGray); // Token: 0x040003B4 RID: 948 private Pen pen_switch_background = new Pen(Color.DimGray, 2f); // Token: 0x040003B5 RID: 949 private bool switch_status = false; // Token: 0x040003B6 RID: 950 private Color color_switch_foreground = Color.FromArgb(36, 36, 36); // Token: 0x040003B7 RID: 951 private Brush brush_switch_foreground = new SolidBrush(Color.FromArgb(36, 36, 36)); // Token: 0x040003B8 RID: 952 private StringFormat sf = null; // Token: 0x040003B9 RID: 953 private string description = "关;开"; } }