博客
关于我
(五)c#Winform自定义控件-复选框-HZHControls
阅读量:413 次
发布时间:2019-03-06

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

官网

前提

入行已经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         /// <summary>  6         /// 必需的设计器变量。 7         /// </summary> 8         private System.ComponentModel.IContainer components = null; 9 10         /// <summary> 11         /// 清理所有正在使用的资源。12         /// </summary>13         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>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         /// <summary> 26         /// 设计器支持所需的方法 - 不要27         /// 使用代码编辑器修改此方法的内容。28         /// </summary>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

用处及效果

用途:复选框

效果:

最后的话

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

转载地址:http://hyvkz.baihongyu.com/

你可能感兴趣的文章
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>