2010-06-21 11 views
10

Ich möchte eine einfache 3D-Linie in einer WinForms-Anwendung erstellen, um die visuelle Anordnung meines Formularlayouts zu verbessern. Diese Zeile ist genau wie die Zeile im About Windows Dialog (kann in Windows Explorer -> Hilfe -> Über Windows geöffnet werden).Wie kann ich eine Zeile in einer WinForms-Anwendung erstellen?

Ein Beispiel überprüft werden here. Die letzte Zeile (3D) ist die, die ich will, nicht die erste.

Wie kann dies in C# oder Visual Basic (.NET) getan werden?

Dank

Antwort

7

Wenn Sie SysInternals' ZoomIt Dienstprogramm verwenden, können Sie sehen, dass dies einfach zwei Zeilen ist. Ein dunkelgrauer über einem weißen. Zeichnen von Linien ist einfach genug mit Graphics.DrawLine(), Sie müssen nur sicherstellen, dass Sie eine dunkle Farbe auswählen, die gut mit der BackColor des Formulars arbeiten. Das ist nicht immer Schlachtschiffgrau, wenn der Benutzer ein anderes Thema auswählt. Das lässt den GroupBox-Trick flach fallen.

Dieser Beispielcode ist betriebsbereit:

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

Beachten Sie die Verwendung ein button1 in diesem Code dort sicherstellen, dass die Linie in der richtigen Höhe gezogen wird, selbst wenn das Formular neu skaliert wird. Wählen Sie Ihr eigenes Steuerelement als Referenz für die Linie.

2

Eine Möglichkeit ist, ein Gruppenfeld ohne Etikett und Höhe 0 (oder ist es 1, nicht mehr genau erinnern) zu schaffen - ich weiß, dass ich vor diesem Trick verwendet habe, auch wenn es sich anfühlt, ein bisschen hacky :-)

+0

Hallo @Tor, ich habe das einmal versucht, aber wenn Benutzer Skins in Windows verwendet, kann dies die Zeile sehr seltsam aussehen lassen !!! Ich suche und Alternative zu dieser Technik. – RHaguiuda

3

Ich habe auch die GroupBox hack verwendet und es hat den Vorteil des Styling selbst basierend auf dem OS-Rahmen Thema.

Es gibt auch eine Line-Klasse in der Kontrollgruppe VB Power Packs. Es gibt ein paar andere Leckereien, die wir auch benutzt haben.

Bearbeiten: Hier ist meine Seperator-Klasse zum Zeichnen von horizontalen Linie mit der oben genannten Methode.

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 
     { 
     } 
    } 
} 
44

ein Label-Steuerelement mit einem 3D-Rahmen hinzufügen und ohne Text und stellen Sie dann die Höhe 2.

+0

Danke. Das hat perfekt funktioniert. – RHaguiuda

1

Sie einen Zeilentrenneffekt durch Zugabe von einem Label gesetzt und seinen Textes als Unterstrichen „_“

bekommen
Verwandte Themen