我怎样才能在文本 c# 上方有一行
How can I have a line above the text c#
我在 C# 和 Visual S.2013 中工作,我还拥有 Infragistics 2015 的许可证。
在我的网格中,我有一个带有一些文本的文本标签。
我想在文本上方加一行。
像这样:
但是我不知道如何进行...
非常感谢。
您可以继承 Label
并覆盖 OnPaint
事件:
public class TopBorderLabel : Label
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawBorder(e.Graphics, ClientRectangle,
Color.White, 0, ButtonBorderStyle.None,
Color.Black, 2, ButtonBorderStyle.Solid,
Color.White, 0, ButtonBorderStyle.None,
Color.White, 0, ButtonBorderStyle.None);
}
}
这基本上是说,用简单的英语来说,“每当我们绘制(即 WinForms 呈现)控件(标签)时,按照您的意愿绘制它 (base.OnPaint(e)
),但也会在它周围绘制一个边框。我们通过在 white, 0, None
中,对于除顶部以外的所有边框,顶部边框为黑色且厚度为 2 像素。
编辑
OP,我会按原样保留我的答案,因为它仍然可行 - 但我认为你会发现 Anton 的答案在这里是最优雅的,因为我 do 必须将一些冗余参数传递给 DrawBorder
方法。
只需添加从 Label
派生的新 class。我认为代码是不言自明的。
class LabelWithLine : Label
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(Pens.Black, 0, 0, this.Width, 0);
}
}
重建您的解决方案。现在 LabelWithLine
应该会出现在工具箱中,您可以制作表格了。
我会进一步扩展它,让它看起来更专业。
public class LabelWithLine : Label
{
private Color lineColor;
private DashStyle dashStyle;
private bool isLineVisible;
/// <summary>
///set browseable and group by category in propery browser
/// </summary>
[Browsable(true)]
[Category("Line")]
public Color LineColor
{
get { return lineColor; }
set { lineColor = value; this.Invalidate(); }
}
[Browsable(true)]
[Category("Line")]
public DashStyle DashStyle { get{return dashStyle;}
set { dashStyle = value; this.Invalidate(); }
}
[Browsable(true)]
[Category("Line")]
public bool IsLineVisible { get{return isLineVisible;}
set { isLineVisible = value; this.Invalidate(); }
}
public LabelWithLine()
{
lineColor = Color.Black;
dashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
isLineVisible = true;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (isLineVisible)
{
Pen p = new Pen(LineColor);
p.DashStyle = this.DashStyle;
e.Graphics.DrawLine(p, 0, 0, this.Width, 0);
}
}
}
这里是用法
labelWithLine1.LineColor = Color.Blue;
labelWithLine1.IsLineVisible = true;
labelWithLine1.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
我在 C# 和 Visual S.2013 中工作,我还拥有 Infragistics 2015 的许可证。 在我的网格中,我有一个带有一些文本的文本标签。 我想在文本上方加一行。 像这样:
但是我不知道如何进行...
非常感谢。
您可以继承 Label
并覆盖 OnPaint
事件:
public class TopBorderLabel : Label
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawBorder(e.Graphics, ClientRectangle,
Color.White, 0, ButtonBorderStyle.None,
Color.Black, 2, ButtonBorderStyle.Solid,
Color.White, 0, ButtonBorderStyle.None,
Color.White, 0, ButtonBorderStyle.None);
}
}
这基本上是说,用简单的英语来说,“每当我们绘制(即 WinForms 呈现)控件(标签)时,按照您的意愿绘制它 (base.OnPaint(e)
),但也会在它周围绘制一个边框。我们通过在 white, 0, None
中,对于除顶部以外的所有边框,顶部边框为黑色且厚度为 2 像素。
编辑
OP,我会按原样保留我的答案,因为它仍然可行 - 但我认为你会发现 Anton 的答案在这里是最优雅的,因为我 do 必须将一些冗余参数传递给 DrawBorder
方法。
只需添加从 Label
派生的新 class。我认为代码是不言自明的。
class LabelWithLine : Label
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(Pens.Black, 0, 0, this.Width, 0);
}
}
重建您的解决方案。现在 LabelWithLine
应该会出现在工具箱中,您可以制作表格了。
我会进一步扩展它,让它看起来更专业。
public class LabelWithLine : Label
{
private Color lineColor;
private DashStyle dashStyle;
private bool isLineVisible;
/// <summary>
///set browseable and group by category in propery browser
/// </summary>
[Browsable(true)]
[Category("Line")]
public Color LineColor
{
get { return lineColor; }
set { lineColor = value; this.Invalidate(); }
}
[Browsable(true)]
[Category("Line")]
public DashStyle DashStyle { get{return dashStyle;}
set { dashStyle = value; this.Invalidate(); }
}
[Browsable(true)]
[Category("Line")]
public bool IsLineVisible { get{return isLineVisible;}
set { isLineVisible = value; this.Invalidate(); }
}
public LabelWithLine()
{
lineColor = Color.Black;
dashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
isLineVisible = true;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (isLineVisible)
{
Pen p = new Pen(LineColor);
p.DashStyle = this.DashStyle;
e.Graphics.DrawLine(p, 0, 0, this.Width, 0);
}
}
}
这里是用法
labelWithLine1.LineColor = Color.Blue;
labelWithLine1.IsLineVisible = true;
labelWithLine1.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;