这是什么控制?组箱或不!
题
只是好奇的控制下所示,该直线的标签。我试图找到一种类似的控制它,但都没有也没有任何组框设置,所以不是我只是做了一组框有高度的2个重复它。
但是有一个实际控制或设定这样做?和什么是实际控制?
解决方案
间谍++ 告诉我们的那些实际上是两个独立的 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);
}
}
你还可以找到更详细的信息和额外的代码样本 在这里上演示.
其他提示
几年前,我遇到了同样的问题,最终只是为此划了一条线。
事实上,我什至使用了一幅宽度足够长的固定线图像,以便可以通过显示图像的所需部分(宽度)在所有情况下使用。
此解决方案自此一直对我有效。
不隶属于 StackOverflow