在软件开发中,控件较多,一般都会碰到若干控件需要分割开来。系统自带的也有一个控件groupbox。后续文章会专门讲解如何美化此空间。今天这篇文章是讲如何用control 绘制一个。
首先分析结构
1.控件由两条线段+靠左边上的一段文字组成
依据此原理,可以将控件分为三个区域。
如何绘制文字在
C#控件美化之路自己动手绘制用GDI+绘制一个Lable控件(二)
这篇文章中已经详细解释。
本篇文章主要是学习绘制两条直线,还有居中计算。代码比较简单,直接贴完整代码块
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
PaintNotesLine(e);
}
//绘制线条和注释文字
private void PaintNotesLine(PaintEventArgs e)
{
Graphics g = e.Graphics;
//Rectangle rec = ClientRectangle;
float middleY = Height / 2;
var sizeStr = g.MeasureString(Text, Font);
var recStr = new RectangleF(10, middleY - sizeStr.Height / 2, sizeStr.Width, sizeStr.Height);
g.DrawLine(new Pen(new SolidBrush(ForeColor)), 0, middleY, 10 - 1, middleY);
g.DrawLine(new Pen(new SolidBrush(ForeColor)), recStr.Width + 11, middleY, Width, middleY);
g.FillRectangle(new SolidBrush(BackColor), recStr);
//g.DrawString(Text, Font, Brushes.Black, recStr);
DrawString(Text, g, recStr);
}
DrawString 是自写方法,在之前的文章中也提到过,本文再贴一次。
#region 绘制文字
/// <summary>
/// 绘制文字上下居中靠左
/// </summary>
/// <param name="s"></param>
/// <param name="g"></param>
/// <param name="rec"></param>
public void DrawString(string s, Graphics g, RectangleF rec)
{
DrawString(s, g, rec, StringAlignment.Near);
}
/// <summary>
/// 绘制文字上下居中 需要指定水平方向
/// </summary>
/// <param name="s"></param>
/// <param name="g"></param>
/// <param name="rec"></param>
/// <param name="stringAlignment"></param>
public void DrawString(string s, Graphics g, RectangleF rec, StringAlignment stringAlignment)
{
g.DrawString(s, this.Font, new SolidBrush(this.ForeColor), rec, new StringFormat(StringFormatFlags.NoClip | StringFormatFlags.NoWrap)
{
LineAlignment = StringAlignment.Center,
Alignment = stringAlignment,
Trimming = StringTrimming.EllipsisCharacter
});
}
#endregion
关注文林软控,带你一起美化.NET控件。