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

本文介绍如何通过扩展CheckBox和RadioButton控件来自定义其颜色,包括背景色和选中状态的颜色,并提供了一个简单的示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

运行结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值