为你的CheckBox和RadioButton控件添色加彩

原创 2003年08月11日 12:23:00

通过扩展现有的CheckBox和RadioButton控件,可以把这些控件的外观改变不同的颜色,下面就是一个简单的例子。

首先建立ColorCheckControl工程,添加两个控件类:

ColoredCheckBox.cs

using System; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace ColorCheckControl { /// /// ColoredCheckBox 的摘要说明。 /// public class ColoredCheckBox : CheckBox { //添加自定义颜色属性 private Color checkColor; public Color checkBGColor; public ColoredCheckBox() { this.checkColor = this.ForeColor; this.Paint += new PaintEventHandler(this.PaintHandler); } [Description("checkColor由于显示在CheckBox选中时的颜色")] public Color CheckColor { get { return checkColor; } set { checkColor = value; this.Invalidate(); } } public Color checkBgColor { get { return checkBGColor; } set { checkBGColor = value; } } private void PaintHandler (object sender, PaintEventArgs pe) { Point pt = new Point(); if (this.CheckAlign == ContentAlignment.BottomCenter) { pt.X = (this.Width / 2) - 4; pt.Y = this.Height - 11; } if (this.CheckAlign == ContentAlignment.BottomLeft) { pt.X = 3; pt.Y = this.Height - 11; } if (this.CheckAlign == ContentAlignment.BottomRight) { pt.X = this.Width - 11; pt.Y = this.Height - 11; } if (this.CheckAlign == ContentAlignment.MiddleCenter) { pt.X = (this.Width / 2) - 4; pt.Y = (this.Height / 2) - 4; } if (this.CheckAlign == ContentAlignment.MiddleLeft) { pt.X = 3; pt.Y = (this.Height / 2) - 4; } if (this.CheckAlign == ContentAlignment.MiddleRight) { pt.X = this.Width - 11; pt.Y = (this.Height / 2) - 4; } if (this.CheckAlign == ContentAlignment.TopCenter) { pt.X = (this.Width / 2) - 4; pt.Y = 3; } if (this.CheckAlign == ContentAlignment.TopLeft) { pt.X = 3; pt.Y = 3; } if (this.CheckAlign == ContentAlignment.TopRight) { pt.X = this.Width - 11; pt.Y = 3; } DrawBackColor(pe.Graphics,this.checkBGColor,pt); if (this.Checked) DrawCheck(pe.Graphics,this.checkColor,pt); } public void DrawCheck(Graphics g, Color c, Point pt) { Pen pen = new Pen(this.checkColor); g.DrawLine(pen, pt.X, pt.Y + 2, pt.X + 2, pt.Y + 4); g.DrawLine(pen, pt.X, pt.Y + 3, pt.X + 2, pt.Y + 5); g.DrawLine(pen, pt.X, pt.Y + 4, pt.X + 2, pt.Y + 6); g.DrawLine(pen, pt.X + 3, pt.Y + 3, pt.X + 6, pt.Y); g.DrawLine(pen, pt.X + 3, pt.Y + 4, pt.X + 6, pt.Y + 1); g.DrawLine(pen, pt.X + 3, pt.Y + 5, pt.X + 6, pt.Y + 2); } public void DrawBackColor(Graphics g,Color b, Point pt) { SolidBrush br = new SolidBrush(this.checkBgColor); g.FillRectangle(br,pt.X,pt.Y,7,7); } } }

ColoredRadioButton.cs

using System; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace ColorCheckControl { /// /// ColoredRadioButton 的摘要说明。 /// public class CustomColorRadioButton : RadioButton { private Color checkColor; public CustomColorRadioButton() { this.checkColor = this.ForeColor; this.Paint += new PaintEventHandler(this.PaintHandler); } [Description("The color used to display the check painted in the RadioButton")] public Color CheckColor { get { return checkColor; } set { checkColor = value; this.Invalidate(); } } private void PaintHandler (object sender, PaintEventArgs pe) { if (this.Checked) { Point pt = new Point(); if (this.CheckAlign == ContentAlignment.BottomCenter) { pt.X = (this.Width / 2) - 3; pt.Y = this.Height - 9; } if (this.CheckAlign == ContentAlignment.BottomLeft) { pt.X = 4; pt.Y = this.Height - 9; } if (this.CheckAlign == ContentAlignment.BottomRight) { pt.X = this.Width - 9; pt.Y = this.Height - 9; } if (this.CheckAlign == ContentAlignment.MiddleCenter) { pt.X = (this.Width / 2) - 3; pt.Y = (this.Height / 2) - 3; } if (this.CheckAlign == ContentAlignment.MiddleLeft) { pt.X = 4; pt.Y = (this.Height / 2) - 3; } if (this.CheckAlign == ContentAlignment.MiddleRight) { pt.X = this.Width - 9; pt.Y = (this.Height / 2) - 3; } if (this.CheckAlign == ContentAlignment.TopCenter) { pt.X = (this.Width / 2) - 3; pt.Y = 4; } if (this.CheckAlign == ContentAlignment.TopLeft) { pt.X = 4; pt.Y = 4; } if (this.CheckAlign == ContentAlignment.TopRight) { pt.X = this.Width - 9; pt.Y = 4; } DrawCheck(pe.Graphics, this.checkColor,pt); } } public void DrawCheck(Graphics g, Color c, Point pt) { Pen pen = new Pen(this.checkColor); g.DrawLine(pen, pt.X, pt.Y + 1, pt.X + 3, pt.Y + 1); g.DrawLine(pen, pt.X, pt.Y + 2, pt.X + 3, pt.Y + 2); g.DrawLine(pen, pt.X + 1, pt.Y, pt.X + 1, pt.Y + 3); g.DrawLine(pen, pt.X + 2, pt.Y, pt.X + 2, pt.Y + 3); } } }

然后建立表单Form1,代码如下:

Form1.cs

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace ColorCheckControl { /// /// Form1 的摘要说明。 /// /// public class Form1 : System.Windows.Forms.Form { private ColorCheckControl.ColoredCheckBox checkBox1; private ColorCheckControl.ColoredCheckBox checkBox2; private ColorCheckControl.CustomColorRadioButton radioButton1; private ColorCheckControl.CustomColorRadioButton radioButton2; private System.Windows.Forms.LinkLabel linkLabel1; /// /// 必需的设计器变量。 /// private System.ComponentModel.Container components = null; public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); } /// /// 清理所有正在使用的资源。 /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows 窗体设计器生成的代码 /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); this.checkBox1 = new ColorCheckControl.ColoredCheckBox(); this.checkBox2 = new ColorCheckControl.ColoredCheckBox(); this.radioButton1 = new ColorCheckControl.CustomColorRadioButton(); this.radioButton2 = new ColorCheckControl.CustomColorRadioButton(); this.linkLabel1 = new System.Windows.Forms.LinkLabel(); this.SuspendLayout(); // // checkBox1 // this.checkBox1.checkBgColor = System.Drawing.Color.LimeGreen; this.checkBox1.CheckColor = System.Drawing.Color.Red; this.checkBox1.Checked = true; this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; this.checkBox1.Location = new System.Drawing.Point(60, 64); this.checkBox1.Name = "checkBox1"; this.checkBox1.Size = new System.Drawing.Size(224, 24); this.checkBox1.TabIndex = 1; this.checkBox1.Text = "扩展的CheckBox类:彩色CheckBox"; // // checkBox2 // this.checkBox2.checkBgColor = System.Drawing.Color.SkyBlue; this.checkBox2.CheckColor = System.Drawing.Color.Red; this.checkBox2.Checked = true; this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; this.checkBox2.Location = new System.Drawing.Point(60, 96); this.checkBox2.Name = "checkBox2"; this.checkBox2.Size = new System.Drawing.Size(224, 24); this.checkBox2.TabIndex = 2; this.checkBox2.Text = "扩展的CheckBox类:彩色CheckBox"; // // radioButton1 // this.radioButton1.CheckColor = System.Drawing.Color.Red; this.radioButton1.Checked = true; this.radioButton1.Location = new System.Drawing.Point(60, 8); this.radioButton1.Name = "radioButton1"; this.radioButton1.Size = new System.Drawing.Size(224, 24); this.radioButton1.TabIndex = 3; this.radioButton1.TabStop = true; this.radioButton1.Text = "扩展的RadioButton类:彩色单选框"; // // radioButton2 // this.radioButton2.CheckColor = System.Drawing.Color.Blue; this.radioButton2.Location = new System.Drawing.Point(60, 32); this.radioButton2.Name = "radioButton2"; this.radioButton2.Size = new System.Drawing.Size(224, 24); this.radioButton2.TabIndex = 4; this.radioButton2.Text = "扩展的RadioButton类:彩色单选框"; // // linkLabel1 // this.linkLabel1.LinkArea = new System.Windows.Forms.LinkArea(0, 100); this.linkLabel1.Location = new System.Drawing.Point(108, 128); this.linkLabel1.Name = "linkLabel1"; this.linkLabel1.Size = new System.Drawing.Size(128, 23); this.linkLabel1.TabIndex = 5; this.linkLabel1.TabStop = true; this.linkLabel1.Text = "【孟宪会之精彩世界】"; this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(344, 157); this.Controls.Add(this.linkLabel1); this.Controls.Add(this.radioButton2); this.Controls.Add(this.radioButton1); this.Controls.Add(this.checkBox2); this.Controls.Add(this.checkBox1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.Name = "Form1"; this.Text = "为你的CheckBox和RadioButton控件增色加彩"; this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing); this.ResumeLayout(false); } #endregion /// /// 应用程序的主入口点。 /// /// [STAThread] static void Main() { Application.Run(new Form1()); } private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { System.Diagnostics.Process.Start("IExplore.exe","http://xml.sz.luohuedu.net"); } } }

运行结果如下:

CSDN_Dev_Image_2003-8-71748451.gif

Winform 动态添加RadioButton、CheckBox 且任意分组

Winform 动态添加RadioButton、CheckBox 且任意分组
  • u011470119
  • u011470119
  • 2014年08月12日 22:54
  • 2860

C#学习笔记:RadioButton控件与CheckBox控件的用法

一、用途 1.RadioButton控件 单选按钮,当与其他单选按钮成对出现时,允许用户从一组选项中选择单个选项。也就是说,当同一个容器中(Form、Panel、GroupBox、PictureB...
  • qq_28249373
  • qq_28249373
  • 2017年07月09日 15:41
  • 3282

RecyclerView中含有CheckBox多选、单选和RadioGoup全解

前言我们之前在使用ListView时,经常遇到含有CheckBox实现多选或者RaidoButton实现单选的问题,我们常使用的办法就是记着选择位置,当然在RecyclerView中原理是一样的,这里...
  • aiynmimi
  • aiynmimi
  • 2017年03月21日 18:20
  • 3450

ios radiobutton、checkbox、pulldown控件封裝整理

  • 2014年04月21日 12:06
  • 355KB
  • 下载

ListView Item里面含有RadioButton、CheckBox、星星、EditText控件

  • 2016年11月12日 21:09
  • 22.39MB
  • 下载

UI控件之RadioButton(单选按钮)&Checkbox(复选按钮)

(一)概述: (二)RadioButton的基本用法与事件处理: 效果图: 实现代码: xml文件 ...
  • MakeYourChance
  • MakeYourChance
  • 2016年06月21日 10:30
  • 3983

Android[初级教程]第三篇 RadioButton和CheckBox控件

这次我们讲RadioButton和CheckBox控件,首先我们讲RadioButton控件。 相信大家一定看过西游记,里面有妖精抓唐僧的场景,我们就用这两个控件来模拟一下,RadionButton...
  • kangkangz4
  • kangkangz4
  • 2011年09月30日 12:39
  • 1166

Android学习分享-常见控件05-RadioButton和CheckBox详解

Android RadioButton和CheckBox的用法
  • liu_hui2015
  • liu_hui2015
  • 2016年12月05日 01:34
  • 124

android基本控件RadioButton/CheckBox

MainActivity.xml
  • Never__mind
  • Never__mind
  • 2017年07月20日 12:22
  • 211

CheckBox控件及OnCheckedChangeListener监听器的使用,RadioGroup及RadioButton的使用

  • Ash_Zheng
  • Ash_Zheng
  • 2015年09月04日 20:40
  • 556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为你的CheckBox和RadioButton控件添色加彩
举报原因:
原因补充:

(最多只允许输入30个字)