C#窗体控件GroupBox修改边框色
控件Group Box默认的边框的颜色是白色的,在很多时候显得不那么突出。但默认的属性列表里面并没有提供相应的接口。所以只能借助重绘事件。
网上很多都说使用 OnPaint 事件,但是我在事件列表中没找到,应该是隐藏得太深了(需要用 override 关键字来重写)。我这里直接使用了 Paint 事件,也可以达到其效果。
感谢:http://blog.csdn.net/haoduo123456789001/article/details/51083223
public partial class TestForm : Form
{ public TestForm()
{
InitializeComponent(); this.groupBox1.Paint += groupBox_Paint;
this.groupBox2.Paint += groupBox_Paint;
} void groupBox_Paint(object sender, PaintEventArgs e)
{
GroupBox gBox = (GroupBox)sender; e.Graphics.Clear(gBox.BackColor);
e.Graphics.DrawString(gBox.Text, gBox.Font, Brushes.Red, , );
var vSize = e.Graphics.MeasureString(gBox.Text, gBox.Font);
e.Graphics.DrawLine(Pens.Red, , vSize.Height / , , vSize.Height / );
e.Graphics.DrawLine(Pens.Red, vSize.Width + , vSize.Height / , gBox.Width - , vSize.Height / );
e.Graphics.DrawLine(Pens.Red, , vSize.Height / , , gBox.Height - );
e.Graphics.DrawLine(Pens.Red, , gBox.Height - , gBox.Width - , gBox.Height - );
e.Graphics.DrawLine(Pens.Red, gBox.Width - , vSize.Height / , gBox.Width - , gBox.Height - );
} private void TestForm_Load(object sender, EventArgs e)
{ }
}
效果图:
|
|
方法二:
当然,如果你愿意,请看下面的利用 OnPaint 来实现的方法。
首先,需要创建一个自己的组件(类似于自定义控件):

添加后,切换至“代码视图”。
将继承关系,修改为:
public partial class MyGroupBox : GroupBox //Component
{
public MyGroupBox()
{
InitializeComponent();
} public MyGroupBox(IContainer container)
{
container.Add(this); InitializeComponent();
}
// 重写
}
然后重写 OnPaint() 方法:
// 重写
protected override void OnPaint(PaintEventArgs e)
{
var vSize = e.Graphics.MeasureString(this.Text, this.Font); e.Graphics.Clear(this.BackColor);
e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), , ); e.Graphics.DrawLine(Pens.Black, , vSize.Height / , , vSize.Height / );
e.Graphics.DrawLine(Pens.Black, vSize.Width + , vSize.Height / , this.Width - , vSize.Height / );
e.Graphics.DrawLine(Pens.Black, , vSize.Height / , , this.Height - );
e.Graphics.DrawLine(Pens.Black, , this.Height - , this.Width - , this.Height - );
e.Graphics.DrawLine(Pens.Black, this.Width - , vSize.Height / , this.Width - , this.Height - );
}
按 F6 生成一下,然后就可以在 工具栏里面 找到它,然后,你就不需要再用以前的 GroupBox 啦。一劳永逸

你甚至可以将 边框颜色 通过控件属性的方式自己把他公开出来。
public partial class MyGroupBox : GroupBox//Component
{
private Color mBorderColor = Color.Black;
[Browsable(true),Description("边框颜色"),Category("自定义分组")]
public Color BorderColor
{
get { return mBorderColor; }
set { mBorderColor = value; }
} public MyGroupBox()
{
InitializeComponent();
} public MyGroupBox(IContainer container)
{
container.Add(this); InitializeComponent();
} // 重写
protected override void OnPaint(PaintEventArgs e)
{
var vSize = e.Graphics.MeasureString(this.Text, this.Font); e.Graphics.Clear(this.BackColor);
e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), , );
Pen vPen = new Pen(this.mBorderColor); // 用属性颜色来画边框颜色
e.Graphics.DrawLine(vPen, , vSize.Height / , , vSize.Height / );
e.Graphics.DrawLine(vPen, vSize.Width + , vSize.Height / , this.Width - , vSize.Height / );
e.Graphics.DrawLine(vPen, , vSize.Height / , , this.Height - );
e.Graphics.DrawLine(vPen, , this.Height - , this.Width - , this.Height - );
e.Graphics.DrawLine(vPen, this.Width - , vSize.Height / , this.Width - , this.Height - );
}
}

[http://www.cnblogs.com/CUIT-DX037/]
C#窗体控件GroupBox修改边框色的更多相关文章
- C# WinForm窗体控件GroupBox修改边框颜色控件
C# WinForm窗体控件GroupBox修改边框颜色控件 1.新建组件这里可以自定义一个GroupBox控件起名为GroupBoxEx 2.增加一个BoderColor属性 private Col ...
- C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法
C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...
- winform继承窗体,无法修改父窗体控件问题处理笔记
问题描述: 一个窗体集成父窗体,发现无法直接修改父窗体的控件,比如修改大小等,父窗体控件已经设置为public,如果做成一个dll被引用无此问题 特征: 不禁使父窗体控件,就算新加一个控件也会这样:鼠 ...
- 如何在多线程中调用winform窗体控件
由于 Windows 窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包 ...
- 窗体控件 回车事件 分类: WinForm 2014-11-21 10:45 233人阅读 评论(0) 收藏
说明: (1)设置窗体控件的TabIndex属性,(按回车顺序设置TabIndex的大小) (2)修改窗体的一个属性:KeyPreview=true //protected override void ...
- c#中跨线程调用windows窗体控件
c#中跨线程调用windows窗体控件解决. 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来 ...
- c#中如何跨线程调用windows窗体控件
c#中如何跨线程调用windows窗体控件? 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首 ...
- QT 窗体控件的透明度设置(三种方法)
整个窗体 当设置QT的窗体(QMainWindow, QDialog)时,直接用 targetForm->setWindowOpacity() 函数即可实现,效果为窗体及窗体内所有控件都透明 ...
- C# 遍历窗体控件顺序问题
今天在做C# winform 窗体控件遍历时遇到控件顺序的问题,也就是控件被遍历的先后问题.实际情况如下所述. 窗体界面如下: 界面构成是:主界面有一个 Panel (Panel_14),Panel_ ...
随机推荐
- selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出
部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...
- 跨平台技术iOS与安卓
1.教学资源获取 Flutter的使用教学笔记 2.本地学习笔记
- 【转】Linux将composer的bin目录放到PATH环境变量中
将composer的bin目录放到PATH环境变量中 使用composer global config bin-dir --absolute查看composer的bin目录 输出类似 Changed ...
- Python第一次写的代码
#!/bin/bash/env python # -*- coding:utf-8 -*- #function:输出1-10每隔1秒 import time start = 1 flag = True ...
- cuda编程知识普及
本帖经过多方整理,大多来自各路书籍<GPGPU编程技术><cuda高性能> 1 grid 和 block都可以用三元向量来表示: grid的数组元素是block blo ...
- python web开发之flask框架学习(2) 加载模版
上次学习了flask的helloword项目的创建,这次来学习flask项目的模版加载: 第一步:创建一个flask项目 第二步:在项目目录的templates文件夹下创建一个html文件 第三步: ...
- dedecms图片绝对路径(附件绑定域名)的设置方法
dedecms默认的附件路径使用的是相对路径,但是在实际应用,我们可能会需要让文章的图片附件显示绝对地址,解决方案如下: 1.打开include目录下的文件extend.func.php,添加函数re ...
- P1630 求和
题意:求$\sum_{i=1}^a i^b,a,b\le 10^9$ 暴力只有30分QAQ(本数学蒟蒻当然想不到正解啦) 正解:模数很小,不难(?)想到$i^a%10000=(i+b)^a %1000 ...
- php屏蔽错误消息
定义和用法: error_reporting() 设置 PHP 的报错级别并返回当前级别. 函数语法: error_reporting(report_level) 如果参数 level 未指定,当前报 ...
- 为asp.net core 自定义路由动态修改
根据IApplicationModelConvention 接口 实现相应的方法 /// <summary> /// 定义个类RouteConvention,private 来实现 IAp ...
