CSDN博客

img net_lover

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

发表于2003/8/11 12:23:00  3275人阅读

分类: C#

通过扩展现有的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"); } } }

运行结果如下:

0 0

相关博文

我的热门文章

img
取 消
img