前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(五)c#Winform自定义控件-复选框

(五)c#Winform自定义控件-复选框

作者头像
冰封一夏
发布2019-09-11 15:52:19
6650
发布2019-09-11 15:52:19
举报

前提

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

GitHub:https://github.com/kwwwvagaa/NetWinformControl

码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

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

目录

https://www.cnblogs.com/bfyx/p/11364884.html

准备工作

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

开始

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

属性如下

代码语言:javascript
复制
  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                     else
100                     {
101                         panel1.BackgroundImage = Properties.Resources.checkbox0;
102                     }
103                 }
104                 else
105                 {
106                     if (_checked)
107                     {
108                         panel1.BackgroundImage = Properties.Resources.checkbox10;
109                     }
110                     else
111                     {
112                         panel1.BackgroundImage = Properties.Resources.checkbox00;
113                     }
114                 }
115             }
116         }

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

代码语言:javascript
复制
1   private void CheckBox_MouseDown(object sender, MouseEventArgs e)
2         {
3             Checked = !Checked;
4         }

下面看下完整代码

代码语言:javascript
复制
  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 Enabled
104         {
105             get
106             {
107                 return base.Enabled;
108             }
109             set
110             {
111                 base.Enabled = value;
112                 if (value)
113                 {
114                     if (_checked)
115                     {
116                         panel1.BackgroundImage = Properties.Resources.checkbox1;
117                     }
118                     else
119                     {
120                         panel1.BackgroundImage = Properties.Resources.checkbox0;
121                     }
122                 }
123                 else
124                 {
125                     if (_checked)
126                     {
127                         panel1.BackgroundImage = Properties.Resources.checkbox10;
128                     }
129                     else
130                     {
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 }
代码语言:javascript
复制
 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             // panel1
36             // 
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             // label1
47             // 
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             // UCCheckBox
61             // 
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         #endregion
75 
76         private System.Windows.Forms.Panel panel1;
77         private System.Windows.Forms.Label label1;
78     }
79 }

用处及效果

用途:复选框

效果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
  • 目录
  • 准备工作
  • 开始
  • 用处及效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档