我怎样才能在文本 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;