只是好奇的控制下所示,该直线的标签。我试图找到一种类似的控制它,但都没有也没有任何组框设置,所以不是我只是做了一组框有高度的2个重复它。

但是有一个实际控制或设定这样做?和什么是实际控制?

Internet Options property dialog

有帮助吗?

解决方案

间谍++ 告诉我们的那些实际上是两个独立的 STATIC 控制 (类似于 Label 在它).

  • 第一个是简单地定期静态案文的控制,指出"家庭"页。

  • 第二具有的 SS_ETCHEDHORZ 风格 设置,这就使它作为一个3D线。不幸的是,能够设置这种风格是不会暴露我们从它.

如你所注意到的问题,有一些黑客/解决办法,使我们能够实现一个类似的看,如垂直压缩 GroupBox 控制或压倒一切的 OnPaint 方法中的一个 Label 控制和使用 ControlPaint 一流的画一个3D边界。他们的工作,但我从来不喜欢他们。

但是你 可以 实际上设置的 SS_ETCHEDHORZ 自己的风格,这样你可以复制的本地UI。这里有一个小类。它添加到项目、编辑和你应该看到一个新的控制出现在你的"工具箱"中被称为"HorizontalRule".使用它,就像任何其他控制了!

public class HorizontalRule : Control
{
    private const int FixedHeight   = 2;

    private const int WS_CHILD      = 0x40000000;
    private const int WS_VISIBLE    = 0x10000000;
    private const int SS_ETCHEDHORZ = 0x00000010;
    private const int SS_ETCHEDVERT = 0x00000011;

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ClassName = "STATIC";
            cp.Style = WS_CHILD | SS_ETCHEDHORZ;
            if (this.Visible)
            {
                cp.Style |= WS_VISIBLE;
            }
            return cp;
        }
    }

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
    {
        height = FixedHeight;
        base.SetBoundsCore(x, y, width, height, specified);
    }
}

你还可以找到更详细的信息和额外的代码样本 在这里上演示.

其他提示

几年前,我遇到了同样的问题,最终只是为此划了一条线。

事实上,我什至使用了一幅宽度足够长的固定线图像,以便可以通过显示图像的所需部分(宽度)在所有情况下使用。

此解决方案自此一直对我有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top