前言
由于工作种项目的需要,要运用label来展示自定义控件中,物体的示意图,需要添加切割线再label的两边,但是wiform自带的边框格式只有显示和隐藏,故不满足要求。然后再网上查了资料,借鉴前辈们的成果经行了总结和整合,从而实现我的需求。
1.具体实现
代码如下:
public partial class UcVistaLabel : Label
{
public UcVistaLabel()
{
InitializeComponent();
}
private StringAlignment verticalAlignment = StringAlignment.Center;
private StringAlignment horizontalAlignment = StringAlignment.Center;
private Color lineColor = Color.Black;
private Color leftLineColor = Color.Black;
private Color RightLineColor = Color.Black;
protected override void OnPaint(PaintEventArgs pe)
{
//pe.Graphics.Clear(Color.Black);
StringFormat format = new StringFormat();
format.Alignment = horizontalAlignment;
format.LineAlignment = verticalAlignment;
//SizeF fontSize = pe.Graphics.MeasureString(this.Text, this.Font);
//this.Height = (int)fontSize.Height + 20;
//this.Width = (int)fontSize.Width + 20;
//pe.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), this.ClientRectangle, format);
DrawLeftBorder(pe);
DrawRightBorder(pe);
base.OnPaint(pe);
}
//画背景
private void DrawBorder(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
Pen pen = new Pen(Color.Red);
Point[] point = new Point[4];
point[0] = new Point(0, 0);
point[1] = new Point(Width - 1, 0);
point[2] = new Point(Width - 1, Height - 1);
point[3] = new Point(0, Height - 1);
//g.DrawPolygon(pen, point);
g.FillPolygon(new SolidBrush(Color.Red), point);
}
//画左边框
private void DrawLeftBorder(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
Pen pen = new Pen(leftLineColor,2);
Point[] point = new Point[2];
point[0] = new Point(0, 0);
point[1] = new Point(0, this.Height);
g.DrawPolygon(pen, point);
}
//画右边框
private void DrawRightBorder(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
Pen pen = new Pen(RightLineColor,2);
Point[] point = new Point[2];
point[0] = new Point(this.Width, 0);
point[1] = new Point(this.Width, this.Height);
g.DrawPolygon(pen, point);
}
[Description("文本垂直对齐方式"), Category("自定义属性")]
public StringAlignment VerticalAlignment
{
get
{
return verticalAlignment;
}
set
{
verticalAlignment = value;
this.Invalidate();
}
}
[Description("文本水平对齐方式"), Category("自定义属性")]
public StringAlignment HorizontalAlignment
{
get
{
return horizontalAlignment;
}
set
{
horizontalAlignment = value;
this.Invalidate();
}
}
[Description("边框颜色"), Category("自定义属性")]
public Color LineColor
{
get
{
return lineColor;
}
set
{
lineColor = value;
this.Invalidate();
}
}
}
总结
总体而言就是继承原来label的所有属性,添加我们需要的边框格式,可以通过添加自定义属性来调整格式等等,从而实现对边框的自定义,也可以修改和添加其他东西来自定义label。这里相当于打个样,仅供大家参考。
如有错误请指正。如有侵权,请联系我,我将及时下架。