C# 标签顶部的DrawLine()

C# 标签顶部的DrawLine(),c#,winforms,graphics,labels,C#,Winforms,Graphics,Labels,我试图在标签上使用DrawLine(),但标签似乎始终位于绘制线的顶部。我已经尝试了很多方法,比如把它放在前面,把它放在下面,在画好线后使用label1.show()。这些都不管用。所附图片说明了我的问题。任何关于如何将线路放在顶部的意见都将不胜感激 尝试此代码,首先加载所有标签使其不可见,然后在绘制表单事件中,在绘制线之前绘制文本 private void Form1_Paint ( object sender , PaintEventArgs e ) {

我试图在标签上使用DrawLine(),但标签似乎始终位于绘制线的顶部。我已经尝试了很多方法,比如把它放在前面,把它放在下面,在画好线后使用label1.show()。这些都不管用。所附图片说明了我的问题。任何关于如何将线路放在顶部的意见都将不胜感激


尝试此代码,首先加载所有标签使其不可见,然后在绘制表单事件中,在绘制线之前绘制文本

private void Form1_Paint ( object sender , PaintEventArgs e ) {     

            foreach (var ctl in this.Controls ) {
                if(ctl.GetType () == typeof ( Label ) ) {
                    e.Graphics.DrawString ( ( ( Label ) ctl ).Text , ( ( Label ) ctl ).Font , new SolidBrush ( ( ( Label ) ctl ).ForeColor ) , ( ( Label ) ctl ).Location  );
                }
            }


            using ( var pen = new Pen ( Color.Blue , 10 ) ) {
                e.Graphics.DrawLine ( pen , 0 , 0 , 200 , 100 );
            }
        }

        private void Form1_Load ( object sender , EventArgs e ) {
            foreach ( var ctl in this.Controls ) {
                if ( ctl.GetType ( ) == typeof ( Label ) ) {
                    ( ( Label ) ctl ).Visible = false;
            }
        }
结果是:

也画文本。这几乎是不可能的,也没有多大意义。解决方法是在标签的绘制事件中绘制线段。但与之相比也非常复杂:使用TextRenderer绘制标签文本。DrawStringAgree with taw。。。将其标记为计算机科学的继承控制方法有点过头了-另外:制作TextRenderer.DrawText这是不可能的,真的,而且:它不会有任何更有效的性能。原因:系统必须同时绘制标签,并且成本与您绘制文本相同。。