如何在WinForms应用程序中创建一行?

时间:2010-06-21 18:17:26

标签: winforms graphics

我想在WinForms应用程序中创建一个简单的3D线,以改善我的表单布局的视觉排列。 此行非常类似于“关于Windows”对话框中的行(可以在Windows资源管理器中打开 - >帮助 - >关于Windows)。

选中一个示例here。最后一行(3D)是我想要的,而不是第一行。

如何在C#或Visual Basic(.NET)中完成?

由于

5 个答案:

答案 0 :(得分:47)

添加带有3D边框且没有文字的Label控件,然后将高度设置为2.

答案 1 :(得分:9)

如果您使用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);
    }

请注意,在此代码中使用button1,以确保在正确的高度绘制线条,即使重新缩放表单也是如此。选择您自己的控件作为该行的参考。

答案 2 :(得分:4)

一种方法是创建一个没有标签和高度0的组合框(或者它是1,不太记得) - 我知道我之前使用过这个技巧,即使它感觉有点hacky :-)

答案 3 :(得分:4)

我也使用了GroupBox hack,它基于OS边框主题获得了样式设置的好处。

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
        {
        }
    }
}

答案 4 :(得分:1)

您可以通过添加标签并将其文本设置为下划线“_”来获得行分隔符效果