如何在文本c#上面加一行?

时间:2015-12-10 10:38:57

标签: c# .net winforms infragistics

我使用Visual S. 2013在C#工作,我还拥有Infragistics 2015的许可证。 在我的网格中,我有一个带有一些文本的文本标签。 我想在文本上面加一行。 像这样:

enter image description here

但我不知道如何继续...

非常感谢。

3 个答案:

答案 0 :(得分:3)

只需添加一个源自Label的新类。我认为代码是不言自明的。

class LabelWithLine : Label
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.DrawLine(Pens.Black, 0, 0, this.Width, 0);
    }
}

重建您的解决方案。现在LabelWithLine应该出现在工具箱中,您可以将其放在表单上。

enter image description here

答案 1 :(得分:1)

您可以继承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,我会留下我的答案,因为它仍然可行 - 但我认为你会发现安东的答案最优雅,因为我 必须将一些冗余参数传递给DrawBorder方法。

答案 2 :(得分:0)

我会更加扩展它,使其看起来更专业。

    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;