(五)c#Winform自定义控件-复选框-HZHControls
发布日期:2021-05-09 00:52:40 浏览次数:12 分类:博客文章

本文共 11663 字,大约阅读时间需要 38 分钟。

官网

前提

入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

GitHub:

码云:

如果觉得写的还行,请点个 star 支持一下吧

欢迎前来交流探讨: 企鹅群568015492 

目录

准备工作

准备4个图片,分别对应选中,没选中,选中禁用,没选中禁用

 

开始

 新增一个用户控件,命名UCCheckBox

属性如下

1 [Description("选中改变事件"), Category("自定义")]  2         public event EventHandler CheckedChangeEvent;  3   4         [Description("字体"), Category("自定义")]  5         public override Font Font  6         {  7             get  8             {  9                 return base.Font; 10             } 11             set 12             { 13                 base.Font = value; 14                 label1.Font = value; 15             } 16         } 17  18         private Color _ForeColor = Color.FromArgb(62, 62, 62); 19         [Description("字体颜色"), Category("自定义")] 20         public new Color ForeColor 21         { 22             get { return _ForeColor; } 23             set 24             { 25                 label1.ForeColor = value; 26                 _ForeColor = value; 27             } 28         } 29         private string _Text = "复选框"; 30         [Description("文本"), Category("自定义")] 31         public string TextValue 32         { 33             get { return _Text; } 34             set 35             { 36                 label1.Text = value; 37                 _Text = value; 38             } 39         } 40         private bool _checked = false; 41         [Description("是否选中"), Category("自定义")] 42         public bool Checked 43         { 44             get 45             { 46                 return _checked; 47             } 48             set 49             { 50                 if (_checked != value) 51                 { 52                     _checked = value; 53                     if (base.Enabled) 54                     { 55                         if (_checked) 56                         { 57                             panel1.BackgroundImage = Properties.Resources.checkbox1; 58                         } 59                         else 60                         { 61                             panel1.BackgroundImage = Properties.Resources.checkbox0; 62                         } 63                     } 64                     else 65                     { 66                         if (_checked) 67                         { 68                             panel1.BackgroundImage = Properties.Resources.checkbox10; 69                         } 70                         else 71                         { 72                             panel1.BackgroundImage = Properties.Resources.checkbox00; 73                         } 74                     } 75  76                     if (CheckedChangeEvent != null) 77                     { 78                         CheckedChangeEvent(this, null); 79                     } 80                 } 81             } 82         } 83  84         public new bool Enabled 85         { 86             get 87             { 88                 return base.Enabled; 89             } 90             set 91             { 92                 base.Enabled = value; 93                 if (value) 94                 { 95                     if (_checked) 96                     { 97                         panel1.BackgroundImage = Properties.Resources.checkbox1; 98                     } 99                     else100                     {101                         panel1.BackgroundImage = Properties.Resources.checkbox0;102                     }103                 }104                 else105                 {106                     if (_checked)107                     {108                         panel1.BackgroundImage = Properties.Resources.checkbox10;109                     }110                     else111                     {112                         panel1.BackgroundImage = Properties.Resources.checkbox00;113                     }114                 }115             }116         }

再来一个改变选中状态的事件

1   private void CheckBox_MouseDown(object sender, MouseEventArgs e)2         {3             Checked = !Checked;4         }

下面看下完整代码

1 // 版权所有  黄正辉  交流群:568015492   QQ:623128629  2 // 文件名称:UCCheckBox.cs  3 // 创建日期:2019-08-15 15:58:34  4 // 功能描述:CheckBox  5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control  6 using System;  7 using System.Collections.Generic;  8 using System.ComponentModel;  9 using System.Drawing; 10 using System.Data; 11 using System.Linq; 12 using System.Text; 13 using System.Windows.Forms; 14  15 namespace HZH_Controls.Controls 16 { 17     [DefaultEvent("CheckedChangeEvent")] 18     public partial class UCCheckBox : UserControl 19     { 20         [Description("选中改变事件"), Category("自定义")] 21         public event EventHandler CheckedChangeEvent; 22  23         [Description("字体"), Category("自定义")] 24         public override Font Font 25         { 26             get 27             { 28                 return base.Font; 29             } 30             set 31             { 32                 base.Font = value; 33                 label1.Font = value; 34             } 35         } 36  37         private Color _ForeColor = Color.FromArgb(62, 62, 62); 38         [Description("字体颜色"), Category("自定义")] 39         public new Color ForeColor 40         { 41             get { return _ForeColor; } 42             set 43             { 44                 label1.ForeColor = value; 45                 _ForeColor = value; 46             } 47         } 48         private string _Text = "复选框"; 49         [Description("文本"), Category("自定义")] 50         public string TextValue 51         { 52             get { return _Text; } 53             set 54             { 55                 label1.Text = value; 56                 _Text = value; 57             } 58         } 59         private bool _checked = false; 60         [Description("是否选中"), Category("自定义")] 61         public bool Checked 62         { 63             get 64             { 65                 return _checked; 66             } 67             set 68             { 69                 if (_checked != value) 70                 { 71                     _checked = value; 72                     if (base.Enabled) 73                     { 74                         if (_checked) 75                         { 76                             panel1.BackgroundImage = Properties.Resources.checkbox1; 77                         } 78                         else 79                         { 80                             panel1.BackgroundImage = Properties.Resources.checkbox0; 81                         } 82                     } 83                     else 84                     { 85                         if (_checked) 86                         { 87                             panel1.BackgroundImage = Properties.Resources.checkbox10; 88                         } 89                         else 90                         { 91                             panel1.BackgroundImage = Properties.Resources.checkbox00; 92                         } 93                     } 94  95                     if (CheckedChangeEvent != null) 96                     { 97                         CheckedChangeEvent(this, null); 98                     } 99                 }100             }101         }102 103         public new bool Enabled104         {105             get106             {107                 return base.Enabled;108             }109             set110             {111                 base.Enabled = value;112                 if (value)113                 {114                     if (_checked)115                     {116                         panel1.BackgroundImage = Properties.Resources.checkbox1;117                     }118                     else119                     {120                         panel1.BackgroundImage = Properties.Resources.checkbox0;121                     }122                 }123                 else124                 {125                     if (_checked)126                     {127                         panel1.BackgroundImage = Properties.Resources.checkbox10;128                     }129                     else130                     {131                         panel1.BackgroundImage = Properties.Resources.checkbox00;132                     }133                 }134             }135         }136         public UCCheckBox()137         {138             InitializeComponent();139         }140 141         private void CheckBox_MouseDown(object sender, MouseEventArgs e)142         {143             Checked = !Checked;144         }145     }146 }
View Code
1 namespace HZH_Controls.Controls 2 { 3     partial class UCCheckBox 4     { 5         ///   6         /// 必需的设计器变量。 7         ///  8         private System.ComponentModel.IContainer components = null; 9 10         ///  11         /// 清理所有正在使用的资源。12         /// 13         /// 如果应释放托管资源,为 true;否则为 false。14         protected override void Dispose(bool disposing)15         {16             if (disposing && (components != null))17             {18                 components.Dispose();19             }20             base.Dispose(disposing);21         }22 23         #region 组件设计器生成的代码24 25         ///  26         /// 设计器支持所需的方法 - 不要27         /// 使用代码编辑器修改此方法的内容。28         /// 29         private void InitializeComponent()30         {31             this.panel1 = new System.Windows.Forms.Panel();32             this.label1 = new System.Windows.Forms.Label();33             this.SuspendLayout();34             // 35             // panel136             // 37             this.panel1.BackgroundImage = global::HZH_Controls.Properties.Resources.checkbox0;38             this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;39             this.panel1.Dock = System.Windows.Forms.DockStyle.Left;40             this.panel1.Location = new System.Drawing.Point(1, 1);41             this.panel1.Name = "panel1";42             this.panel1.Size = new System.Drawing.Size(18, 28);43             this.panel1.TabIndex = 0;44             this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CheckBox_MouseDown);45             // 46             // label147             // 48             this.label1.Dock = System.Windows.Forms.DockStyle.Fill;49             this.label1.Font = new System.Drawing.Font("微软雅黑", 12F);50             this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(62)))), ((int)(((byte)(62)))), ((int)(((byte)(62)))));51             this.label1.Location = new System.Drawing.Point(19, 1);52             this.label1.Name = "label1";53             this.label1.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0);54             this.label1.Size = new System.Drawing.Size(213, 28);55             this.label1.TabIndex = 1;56             this.label1.Text = "复选框";57             this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;58             this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CheckBox_MouseDown);59             // 60             // UCCheckBox61             // 62             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;63             this.BackColor = System.Drawing.Color.Transparent;64             this.Controls.Add(this.label1);65             this.Controls.Add(this.panel1);66             this.Name = "UCCheckBox";67             this.Padding = new System.Windows.Forms.Padding(1);68             this.Size = new System.Drawing.Size(233, 30);69             this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CheckBox_MouseDown);70             this.ResumeLayout(false);71 72         }73 74         #endregion75 76         private System.Windows.Forms.Panel panel1;77         private System.Windows.Forms.Label label1;78     }79 }
View Code

用处及效果

用途:复选框

效果:

最后的话

如果你喜欢的话,请到  点个星星吧

上一篇:(六)c#Winform自定义控件-单选框-HZHControls
下一篇:(四)c#Winform自定义控件-选择按钮组-HZHControls

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月29日 04时10分13秒