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

本文介绍如何通过自定义控件实现对CheckBox和RadioButton的颜色进行个性化设置,包括勾选标记的颜色及背景色,并展示了具体的代码实现。

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

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 );
    }


    
Windows 窗体设计器生成的代码

    
/// <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、付费专栏及课程。

余额充值