为你的CheckBox和RadioButton控件添色加彩
作者: 孟宪会 出自: 【孟宪会之精彩世界】 发布日期: 2003-8-6 18:20:00
通过扩展现有的CheckBox和RadioButton控件,可以把这些控件的外观改变不同的颜色,下面就是一个简单的例子。
首先建立ColorCheckControl工程,添加两个控件类:
ColoredCheckBox.cs
using System;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
namespace ColorCheckControl
{
/// <summary>
/// ColoredCheckBox 的摘要说明。
/// </summary>
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
{
/// <summary>
/// ColoredRadioButton 的摘要说明。
/// </summary>
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
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
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;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
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
/// <summary>
/// 应用程序的主入口点。
/// </summary>
///
[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");
}
}
}
运行结果如下: