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

vhipe2zx  于 2022-11-17  发布在  其他
关注(0)|答案(6)|浏览(127)

我想在WinForms应用程序中创建一条简单的3D线条,以改善表单布局的视觉排列。这条线条与“关于Windows”对话框中的线条非常相似(可以在Windows资源管理器-〉帮助-〉关于Windows中打开)。
一个被检查的例子

最后一行(3D)是我想要的,而不是第一行。
如何在C#或Visual Basic(.NET)中完成此操作?

zf9nrax1

zf9nrax11#

加入具有3D框缐且没有文字的Label控件,然后将高度设定为2。

var separator = new Label();
separator.BorderStyle = BorderStyle.Fixed3D;
separator.Height = 2;
c2e8gylq

c2e8gylq2#

如果您使用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,以确保即使窗体被重新缩放,线条也绘制在正确的高度。选择您自己的控件作为线条的引用。

pengsaosao

pengsaosao3#

一种方法是创建一个没有标签且高度为0(或者是1,不太记得了)的分组框-我知道我以前用过这个技巧,即使感觉有点笨拙:-)

hsgswve4

hsgswve44#

我也使用过GroupBox黑客,它得到了基于操作系统边框主题的样式本身的好处。
VB Power Packs控件集合中还有一个Line类,其中还有一些我们也使用过的好东西。

**Edit:**这是我的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
        {
        }
    }
}
wnrlj8wa

wnrlj8wa5#

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

fhg3lkii

fhg3lkii6#

我编写了一个自定义控件,您可以从NuGet安装控件套件:

Install-Package ALMSTWKND -Version 1.0.0

安装后,它将被添加到“工具箱”窗格中。

相关问题