/* 作者:Starts_2000* 日期:2009-07-30* 网站:http://www.csharpwin.com CS 程序员之窗。* 你可以免费使用或修改以下代码,但请保留版权信息。* 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。*/[ToolboxBitmap(typeof(CheckBox))]public class CheckBoxEx : CheckBox{private Color _baseColor = Color.FromArgb(51, 161, 224);private ControlState _controlState;private static readonly ContentAlignment RightAlignment =ContentAlignment.TopRight |ContentAlignment.BottomRight |ContentAlignment.MiddleRight;private static readonly ContentAlignment LeftAligbment =ContentAlignment.TopLeft |ContentAlignment.BottomLeft |ContentAlignment.MiddleLeft;public CheckBoxEx(): base(){SetStyle(ControlStyles.UserPaint |ControlStyles.AllPaintingInWmPaint |ControlStyles.OptimizedDoubleBuffer |ControlStyles.ResizeRedraw |ControlStyles.SupportsTransparentBackColor, true);}public Color BaseColor{get { return _baseColor; }set{_baseColor = value;base.Invalidate();}}protected virtual int DefaultCheckButtonWidth{get { return 30; }}internal ControlState ControlState{get { return _controlState; }set{if (_controlState != value){_controlState = value;base.Invalidate();}}}protected override void OnMouseEnter(EventArgs e){base.OnMouseEnter(e);ControlState = ControlState.Hover;}protected override void OnMouseLeave(EventArgs e){base.OnMouseLeave(e);ControlState = ControlState.Normal;}protected override void OnMouseDown(MouseEventArgs e){base.OnMouseDown(e);if (e.Button == MouseButtons.Left && e.Clicks == 1){ControlState = ControlState.Pressed;}}protected override void OnMouseUp(MouseEventArgs e){base.OnMouseUp(e);if (e.Button == MouseButtons.Left && e.Clicks == 1){if (ClientRectangle.Contains(e.Location)){ControlState = ControlState.Hover;}else{ControlState = ControlState.Normal;}}}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);base.OnPaintBackground(e);Graphics g = e.Graphics;Rectangle checkButtonRect;Rectangle textRect;CalculateRect(out checkButtonRect, out textRect);g.SmoothingMode = SmoothingMode.AntiAlias;Color backColor = ControlPaint.Light(_baseColor);Color borderColor;Color innerBorderColor;Color checkColor;bool hover = false;if (Enabled){switch (ControlState){case ControlState.Hover:borderColor = _baseColor;innerBorderColor = _baseColor;checkColor = GetColor(_baseColor, 0, 35, 24, 9);hover = true;break;case ControlState.Pressed:borderColor = _baseColor;innerBorderColor = GetColor(_baseColor, 0, -13, -8, -3);checkColor = GetColor(_baseColor, 0, -35, -24, -9);hover = true;break;default:borderColor = _baseColor;innerBorderColor = Color.Empty;checkColor = _baseColor;break;}}else{borderColor = SystemColors.ControlDark;innerBorderColor = SystemColors.ControlDark;checkColor = SystemColors.ControlDark;}using (SolidBrush brush = new SolidBrush(Color.White)){g.FillRectangle(brush, checkButtonRect);}if (hover){using (Pen pen = new Pen(innerBorderColor, 2F)){g.DrawRectangle(pen, checkButtonRect);}}switch (CheckState){case CheckState.Checked:DrawCheckedFlag(g,checkButtonRect,checkColor);break;case CheckState.Indeterminate:checkButtonRect.Inflate(-1, -1);using (GraphicsPath path = new GraphicsPath()){path.AddEllipse(checkButtonRect);using (PathGradientBrush brush = new PathGradientBrush(path)){brush.CenterColor = checkColor;brush.SurroundColors = new Color[] { Color.White };Blend blend = new Blend();blend.Positions = new float[] { 0f, 0.4f, 1f };blend.Factors = new float[] { 0f, 0.3f, 1f };brush.Blend = blend;g.FillEllipse(brush, checkButtonRect);}}checkButtonRect.Inflate(1, 1);break;}using (Pen pen = new Pen(borderColor)){g.DrawRectangle(pen, checkButtonRect);}Color textColor = Enabled ? ForeColor : SystemColors.GrayText;TextRenderer.DrawText(g,Text,Font,textRect,textColor,GetTextFormatFlags(TextAlign, RightToLeft == RightToLeft.Yes));}private void CalculateRect(out Rectangle checkButtonRect, out Rectangle textRect){checkButtonRect = new Rectangle(0, 0, DefaultCheckButtonWidth, DefaultCheckButtonWidth);textRect = Rectangle.Empty;bool bCheckAlignLeft = (int)(LeftAligbment & CheckAlign) != 0;bool bCheckAlignRight = (int)(RightAlignment & CheckAlign) != 0;bool bRightToLeft = RightToLeft == RightToLeft.Yes;if ((bCheckAlignLeft && !bRightToLeft) ||(bCheckAlignRight && bRightToLeft)){switch (CheckAlign){case ContentAlignment.TopRight:case ContentAlignment.TopLeft:checkButtonRect.Y = 2;break;case ContentAlignment.MiddleRight:case ContentAlignment.MiddleLeft:checkButtonRect.Y = (Height - DefaultCheckButtonWidth) / 2;break;case ContentAlignment.BottomRight:case ContentAlignment.BottomLeft:checkButtonRect.Y = Height - DefaultCheckButtonWidth - 2;break;}checkButtonRect.X = 1;textRect = new Rectangle(checkButtonRect.Right + 2,0,Width - checkButtonRect.Right - 4,Height);}else if ((bCheckAlignRight && !bRightToLeft)|| (bCheckAlignLeft && bRightToLeft)){switch (CheckAlign){case ContentAlignment.TopLeft:case ContentAlignment.TopRight:checkButtonRect.Y = 2;break;case ContentAlignment.MiddleLeft:case ContentAlignment.MiddleRight:checkButtonRect.Y = (Height - DefaultCheckButtonWidth) / 2;break;case ContentAlignment.BottomLeft:case ContentAlignment.BottomRight:checkButtonRect.Y = Height - DefaultCheckButtonWidth - 2;break;}checkButtonRect.X = Width - DefaultCheckButtonWidth - 1;textRect = new Rectangle(2, 0, Width - DefaultCheckButtonWidth - 6, Height);}else{switch (CheckAlign){case ContentAlignment.TopCenter:checkButtonRect.Y = 2;textRect.Y = checkButtonRect.Bottom + 2;textRect.Height = Height - DefaultCheckButtonWidth - 6;break;case ContentAlignment.MiddleCenter:checkButtonRect.Y = (Height - DefaultCheckButtonWidth) / 2;textRect.Y = 0;textRect.Height = Height;break;case ContentAlignment.BottomCenter:checkButtonRect.Y = Height - DefaultCheckButtonWidth - 2;textRect.Y = 0;textRect.Height = Height - DefaultCheckButtonWidth - 6;break;}checkButtonRect.X = (Width - DefaultCheckButtonWidth) / 2;textRect.X = 2;textRect.Width = Width - 4;}}private void DrawCheckedFlag(Graphics graphics, Rectangle rect, Color color){PointF[] points = new PointF[3];points[0] = new PointF(rect.X + rect.Width / 4.5f,rect.Y + rect.Height / 2.5f);points[1] = new PointF(rect.X + rect.Width / 2.5f,rect.Bottom - rect.Height / 3f);points[2] = new PointF(rect.Right - rect.Width / 4.0f,rect.Y + rect.Height / 4.5f);using (Pen pen = new Pen(color, 2F)){graphics.DrawLines(pen, points);}}private Color GetColor(Color colorBase, int a, int r, int g, int b){int a0 = colorBase.A;int r0 = colorBase.R;int g0 = colorBase.G;int b0 = colorBase.B;if (a + a0 > 255) { a = 255; } else { a = Math.Max(a + a0, 0); }if (r + r0 > 255) { r = 255; } else { r = Math.Max(r + r0, 0); }if (g + g0 > 255) { g = 255; } else { g = Math.Max(g + g0, 0); }if (b + b0 > 255) { b = 255; } else { b = Math.Max(b + b0, 0); }return Color.FromArgb(a, r, g, b);}internal static TextFormatFlags GetTextFormatFlags(ContentAlignment alignment,bool rightToleft){TextFormatFlags flags = TextFormatFlags.WordBreak |TextFormatFlags.SingleLine;if (rightToleft){flags |= TextFormatFlags.RightToLeft | TextFormatFlags.Right;}switch (alignment){case ContentAlignment.BottomCenter:flags |= TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter;break;case ContentAlignment.BottomLeft:flags |= TextFormatFlags.Bottom | TextFormatFlags.Left;break;case ContentAlignment.BottomRight:flags |= TextFormatFlags.Bottom | TextFormatFlags.Right;break;case ContentAlignment.MiddleCenter:flags |= TextFormatFlags.HorizontalCenter |TextFormatFlags.VerticalCenter;break;case ContentAlignment.MiddleLeft:flags |= TextFormatFlags.VerticalCenter | TextFormatFlags.Left;break;case ContentAlignment.MiddleRight:flags |= TextFormatFlags.VerticalCenter | TextFormatFlags.Right;break;case ContentAlignment.TopCenter:flags |= TextFormatFlags.Top | TextFormatFlags.HorizontalCenter;break;case ContentAlignment.TopLeft:flags |= TextFormatFlags.Top | TextFormatFlags.Left;break;case ContentAlignment.TopRight:flags |= TextFormatFlags.Top | TextFormatFlags.Right;break;}return flags;}}/// <summary>/// 控件的状态。/// </summary>internal enum ControlState{/// <summary>///  正常。/// </summary>
        Normal,/// <summary>/// 鼠标进入。/// </summary>
        Hover,/// <summary>/// 鼠标按下。/// </summary>
        Pressed,/// <summary>/// 获得焦点。/// </summary>
        Focused,}

重写Checkbox 改写选择框的大小相关推荐

  1. Android CheckBox 修改选择框

    效果图 是否被选中打印效果图图 CheckBox  是多选框 ,选中之后可以再次点击取消操作. 在使用的时候注意padding 是相对于字体来的不是相对选择框 下面第一个位置调整了 使用了paddin ...

  2. checkbox wpf 改变框的大小_使用Photoshop智能对象调整图像大小而不会丢失质量

    如果我们查看" 图层"面板,我们会在背景图层上看到图像 我们需要制作两份图像; 一个用于普通的像素版本,一个用于智能对象.要制作第一个副本,请转到菜单栏中的" 图层&qu ...

  3. checkbox wpf 改变框的大小_【论文阅读】倾斜目标范围框(标注)的终极方案

    前言 最常用的斜框标注方式是在正框的基础上加一个旋转角度θ,其代数表示为(x_c,y_c,w,h,θ),其中(x_c,y_c )表示范围框中心点坐标,(w,h)表示范围框的宽和高[1,2,7].对于该 ...

  4. checkbox wpf 改变框的大小_WPF样式取决于复选框状态

    可能有很多更好的方法来解决这个问题,但我试图解决你的解决方案中的两个问题.这个小样本项目可以在这里下载. 1.它只为按钮添加功能,而不是其他功能.该 IsAdvanced标志可以(应该可以 to)被添 ...

  5. 修改CheckBox选择框、设置选择框颜色

    使用组件自带的属性 android:buttonTint 可直接设置选择框的颜色 修改选择框选中与未选中时的状态,需设置选择器 selector.XML <?xml version=" ...

  6. android checkbox 文字和图标间距,CheckBox选择框和文字设置间距

    由于界面美观度的需求,需要自定义CheckBox的选择框. 传统的方法是先定义一个CheckBox的自定义style,如下: style中使用的checkbox_selector.xml 最后在布局文 ...

  7. Swift - 选择框(UIPickerView)的用法

    1,选择框可以让用户以滑动的方式选择值.示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  8. checkbox取值 php_php获取checkbox复选框的内容

    由于checkbox属性,所有必须把checkbox复选择框的名字设置为一个如果checkbox[],php才能读取,以数据形式,否则不能正确的读取checkbox复选框的值哦. 复选二 复选三 复选 ...

  9. 修改elmentui中el-date-picker下拉框样式(大小)

    最近项目里面有一个组件需要用到日期选择器,且这个组件中的日期选择器需要比默认的大小(width:320px)要小一些.于是我准备打开控制台审查元素修改样式. 但是大家可以从下面的图片看到,这个下拉框的 ...

最新文章

  1. Java面试题之类的静态代码块和静态属性等的加载顺序
  2. SAP在中国的发展和现状(培训公司欺诈推广)
  3. A Boring Game
  4. 学水利的想转行计算机,为什么说千万别学水利水电工程?附水利八大院排名2020年(最新)...
  5. python学习的一个定位_python学习之——selenium元素定位
  6. python常用第三方库(转载)
  7. java 资源锁_concurrent包 线程池、资源封锁和队列、ReentrantReadWriteLock介绍
  8. 关于 CSDN 下载频道知识产权保护的声明
  9. linux go 连接oracle,Ubuntu14下golang连接oracle11g (OCI12.1方式)
  10. Linux内核中的PID散列表实例
  11. 阿里矢量库(各种图标搜索功能)
  12. 百度AI人脸识别与检测十:学生人脸识别打卡签到系统之如何查看学生签到信息?
  13. 求某年某月某日是星期几公式
  14. LVGL 7.8模拟时钟
  15. 大沱湾水电站拦河闸坝设计
  16. python编程怎么画三角形的外接圆_python画出三角形外接圆和内切圆的方法
  17. 图片1920x1080分辨率怎么调 ?图片如何修改分辨率?
  18. 2020 年了,微信公众号还有前途吗?
  19. 渗透测试之Nmap命令(四) 使用诱饵
  20. FileProvider路径记录

热门文章

  1. linux下隐藏输入密码
  2. Linux系统编程--2(环境变量,进程控制)
  3. 【ubuntu】ubuntu如何改变系统用户名
  4. java接口的修饰符可以为,附架构师必备技术详解
  5. 从青铜到王者的路线,java枚举类使用场景
  6. 腾讯,字节,阿里,小米,京东大厂Offer拿到手软!分享一点面试小经验
  7. python cook读书笔记第2章字符串和文本
  8. VB数据库经典实例总结(二)
  9. UVA 10404 - Bachet's Game
  10. Delphi获取默认打印机名称及端口