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

博客介绍了通过扩展现有的CheckBox和RadioButton控件来改变其外观颜色的方法。先建立ColorCheckControl工程,添加ColoredCheckBox.cs和ColoredRadioButton.cs两个控件类,再建立表单Form1,给出了Form1.cs代码并展示了运行结果。

通过扩展现有的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、付费专栏及课程。

余额充值