给大家一个WinForm中画横向分隔线的控件源代码。好多人在用。
大家在窗体中使用横向分隔线,好多人都用 GroupBox或者Label来模拟。这样有好处也有坏处。好处是简单,坏处是如果很多条线的话,控制大小很难。
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public class HorizontalLine : Control
{
private Color _lineColor;
[Category("布局"), Description("控件的大小(以像素为单位)。")]
public new Size Size
{
get
{
return base.Size;
}
set
{
// 注意这里,这个控件高度已经在代码中被定死,无论怎么修改都是3像素,如果嫌小,可以手工修改下面的代码。
SetBounds(Location.X, Location.Y, value.Width, 3, BoundsSpecified.Size);
}
}
public new Color BackColor
{
get { return base.BackColor; }
set
{
base.BackColor = Color.Transparent;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
Rectangle r = e.ClipRectangle;
Point left = new Point(r.Location.X, r.Location.Y + 1);
Point right = new Point(r.Location.X + r.Width, r.Location.Y + 1);
// 下面的代码就是 #cccccc 颜色代码,深灰色,有要修改的人可以手工改,或者扩展下,变成属性直接可以定义。
_lineColor = Color.FromArgb(204, 204, 204);
Pen pen = new Pen(new SolidBrush(_lineColor), 1.5f);
g.DrawLine(pen, left, right);
pen.Dispose();
}
}
using System.Drawing;
using System.Windows.Forms;
public class HorizontalLine : Control
{
private Color _lineColor;
[Category("布局"), Description("控件的大小(以像素为单位)。")]
public new Size Size
{
get
{
return base.Size;
}
set
{
// 注意这里,这个控件高度已经在代码中被定死,无论怎么修改都是3像素,如果嫌小,可以手工修改下面的代码。
SetBounds(Location.X, Location.Y, value.Width, 3, BoundsSpecified.Size);
}
}
public new Color BackColor
{
get { return base.BackColor; }
set
{
base.BackColor = Color.Transparent;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
Rectangle r = e.ClipRectangle;
Point left = new Point(r.Location.X, r.Location.Y + 1);
Point right = new Point(r.Location.X + r.Width, r.Location.Y + 1);
// 下面的代码就是 #cccccc 颜色代码,深灰色,有要修改的人可以手工改,或者扩展下,变成属性直接可以定义。
_lineColor = Color.FromArgb(204, 204, 204);
Pen pen = new Pen(new SolidBrush(_lineColor), 1.5f);
g.DrawLine(pen, left, right);
pen.Dispose();
}
}