Frage

Ich bin nur neugierig auf das unten gezeigte Steuerelement, die gerade Linie mit der Beschriftung daneben.Ich habe versucht, ein ähnliches Steuerelement dafür zu finden, aber es gab weder eine Gruppenfeldeinstellung noch eine Gruppenfeldeinstellung. Stattdessen habe ich nur eine GroupBox mit einer Höhe von 2 erstellt, die es repliziert.

Aber gibt es eine tatsächliche Steuerung oder Einstellung, um dies zu tun?Und wie heißt die eigentliche Steuerung?

Internet Options-Eigenschaftsdialog

War es hilfreich?

Lösung

Spy ++ sagt uns, dass es sich tatsächlich um zwei separate Steuerelemente für STATIC (ähnlich einem Label in WinForms).

  • Das erste ist einfach ein reguläres statisches Textsteuerelement mit der Aufschrift "Homepage".

  • Für den zweiten ist der SS_ETCHEDHORZ-Stil festgelegt lässt es als 3D-Linie zeichnen. Leider ist die Möglichkeit, diesen Stil festzulegen, in WinForms nicht verfügbar.

    Wie Sie in der Frage festgestellt haben, gibt es einige Hacks / Workarounds, mit denen wir ein ähnliches Erscheinungsbild erzielen können, z. B. das vertikale Komprimieren eines GroupBox-Steuerelements oder das Überschreiben der OnPaint-Methode eines Label-Steuerelements und das Verwenden der ControlPaint-Klasse zum Zeichnen eines 3D Rand. Sie funktionieren, aber ich habe sie nie gemocht.

    Sie können den SS_ETCHEDHORZ-Stil jedoch selbst festlegen, sodass Sie die native Benutzeroberfläche genau replizieren können. Hier ist eine kleine Klasse, die genau das tut. Fügen Sie es Ihrem Projekt hinzu, kompilieren Sie es, und in Ihrer Toolbox sollte ein neues Steuerelement mit dem Namen "HorizontalRule" angezeigt werden. Verwenden Sie es wie jedes andere Steuerelement!

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

    Weitere Informationen und zusätzlichen Beispielcode finden Sie hier auf CodeProject .

Andere Tipps

Ich hatte vor ein paar Jahren das gleiche Problem und habe zu diesem Zweck nur eine Linie gezogen.

Tatsächlich habe ich sogar ein Festlinienbild mit einer ausreichend langen Breite verwendet, so dass es in allen Fällen verwendet werden kann, indem der erforderliche Teil (Breite) des Bildes angezeigt wird.

Diese Lösung hat seitdem für mich gut funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top