5

以下に示すコントロール、横にラベルが付いた直線に興味があります。同様のコントロールを見つけようとしましたが、グループ ボックスの設定はありませんでした。そのため、代わりにそれを複製する高さ 2 の GroupBox を作成しました。

しかし、これを行うための実際のコントロールまたは設定はありますか? そして、実際のコントロールは何と呼ばれていますか?

インターネット オプションのプロパティ ダイアログ

4

2 に答える 2

11

Spy ++は、これらが実際には2つの別個のSTATICコントロールLabelであることを示しています( WinFormsのaと同様)。

  • 1つ目は、「ホームページ」という通常の静的テキストコントロールです。

  • 2つ目は、3D線として描画するSS_ETCHEDHORZスタイルセットを持っています。残念ながら、このスタイルを設定する機能は、WinForms内からは公開されていません。

質問で指摘したように、コントロールを垂直方向に圧縮したり、コントロールのメソッドをGroupBoxオーバーライドしてクラスを使用して3D境界線を描画したりするなど、同様の外観を実現できるハック/回避策がいくつかあります。それらは機能しますが、私はそれらが好きではありませんでした。OnPaintLabelControlPaint

ただし、実際には自分でスタイルを設定してSS_ETCHEDHORZネイティブUIを正確に複製できるようにすることができます。これがまさにそれを行う小さなクラスです。プロジェクトに追加してコンパイルすると、ツールボックスに「Horizo​​ntalRule」という新しいコントロールが表示されます。他のコントロールと同じように使用してください。

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);
    }
}

また、CodeProjectで、より詳細な情報と追加のサンプルコードを見つけることができます。

于 2011-02-04T11:58:00.033 に答える
0

私は数年前に同じ問題を抱えていましたが、目的のために線を引くだけでした。

実際、画像の必要な部分 (幅) を表示することであらゆる場合に使用できるように、十分に長い幅の固定線画像を 1 つ使用しました。

それ以来、このソリューションは私にとってうまくいきました。

于 2011-02-04T11:43:31.433 に答える