2010-06-21 49 views
10

我想在WinForms应用程序中创建一个简单的3D线,以改进我的表单布局的可视布局。 这行非常像关于Windows对话框中的行(可以在Windows资源管理器 - >帮助 - >关于Windows中打开)。如何在WinForms应用程序中创建一行?

一个例子进行检查here。最后一行(3D)是我想要的,而不是第一行。

如何在C#或Visual Basic(.NET)做些什么呢?

感谢

回答

7

如果使用SysInternals的ZoomIt实用程序,可以看到这只是两行。白色之上的深灰色。使用Graphics.DrawLine()绘制线条非常简单,您只需确保选择与该窗体的BackColor配合良好的深色。如果用户选择另一个主题,那并不总是灰色的。这使GroupBox技巧下降。

此示例代码是维修:

protected override void OnPaint(PaintEventArgs e) { 
     Color back = this.BackColor; 
     Color dark = Color.FromArgb(back.R >> 1, back.G >> 1, back.B >> 1); 
     int y = button1.Bottom + 20; 
     using (var pen = new Pen(dark)) { 
      e.Graphics.DrawLine(pen, 30, y, this.ClientSize.Width - 30, y); 
     } 
     e.Graphics.DrawLine(Pens.White, 30, y+1, this.ClientSize.Width - 30, y+1); 
    } 

注意使用此代码按钮1,有以确保在行权高度绘制,即使形式重新调整。选择您自己的控件作为该行的参考。

2

一种方法是创建一个不带标签和高度0一组框(或者是1,也不太记得了) - 我知道我以前用过的那招,即使感觉有点哈克:-)

+0

嗨@Tor,我试过一次,但如果用户在Windows中使用皮肤,这可以使线看起来很奇怪! 我正在寻找和替代这种技术。 – RHaguiuda 2010-06-21 18:26:04

3

我也已经使用了GroupBox hack和它有基于操作系统边境主题造型本身的利益。

也有VB Power Packs控件集合在一个Line类。那里还有其他一些我们也用过的好东西。

编辑:这是我的Seperator类,用于使用上述方法绘制水平线。

public class Separator : GroupBox 
{ 
    // Methods 
    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) 
    { 
     base.SetBoundsCore(x, y, width, 3, specified); 
    } 

    // Properties 
    [DefaultValue("")] 
    public override string Text 
    { 
     get 
     { 
      return string.Empty; 
     } 
     set 
     { 
     } 
    } 
} 
44

添加一个Label控件具有三维边框并没有文本,然后将高度设置为2

+0

谢谢。这工作完美。 – RHaguiuda 2013-01-22 09:46:38

1

您可以通过添加标签并设置其文字下划线得到一个行分隔符效应“_”

相关问题