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_ ...
随机推荐
- linux配置环境变量 - 认识
环境 ubuntu17.04 终端(就是黑框) 认识 环境变量:$PATH 在 ×××/bin 下的命令,可以不用到指定目录下, 比如:安装hbase后,hbase提供一些shell命令在habse ...
- 加快 hive 查询的 5 种方法
1. 使用 Tez set hive.execution.engine=tez; 2. 使用 ORCFILE.当有多个表 join 时,使用 ORCFile 进行存储,会显著地提高速度. CREATE ...
- C,C++网络编程学习简明指南
C,C++网络编程学习简明指南 1. 扎实的C,C++基础知识 参考资料<C程序设计>,<C++ primer>. 2. TCP/IP协议 经典书是:W.Richard Ste ...
- 快速莫比乌斯变换(FMT)
快速莫比乌斯变换(FMT) 原文出处:虞大的博客.此仅作蒟蒻本人复习用~ 给定两个长度为n的序列 \(a_0, a_1, \cdots, a_{n-1}\)和\(b_0, b_1, \cdots, b ...
- LCA SP913 QTREE2 - Query on a tree II
SP913 QTREE2 - Query on a tree II 给定一棵n个点的树,边具有边权.要求作以下操作: DIST a b 询问点a至点b路径上的边权之和 KTH a b k 询问点a至点 ...
- Linq,拉姆达表达式注意!
linq的条件语句尽量不要出现计算的式子,要不然很可能,程序不能正确的将这些复杂的式子编译成表达式!! 例如: dataContext.Assets.Count(s => s.SubCatego ...
- 利用canvas添加图片水印--直接上代码
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Luogu P2107 小Z的AK计划 堆贪心
好久不做这种题了... 存一下每个点的位置和时间,由于达到某个位置跟之前去哪里AK的无关,所以在时间超限后,可以用大根堆弹掉之前消耗时间最大的,来更新答案,相当于去掉之前花费最大的,直到时间不在超限. ...
- hdu3038判断区间谎言(带权并查集)
题目传送门 题目描述:给你n,m,n代表从1到n这么大的数组,m组v,u,val,代表v到u这个区间的总和是val,然后让你判断m组关系中有几组是错误的. 思路:带权并查集,这道题其实算是让我知道什么 ...
- day21 pickle json shelve configpaser 模块
1. 序列化:我们在网络传输的时候,需要我们对对象进行处理,把对象处理成方便存储和传输的格式,这个过程就叫序列化 序列化的方法不一定一样,三十目的都是为了方便储存和传输. 在python中有三种序列化 ...
