2009-03-28 8 views
1

Gibt es in WinForms eine Möglichkeit, Border-Collapse von CSS zu emulieren?"Collapse" Panel Control Borders für WinForms

Stellen Sie sich vor: Sie haben ein Panel-Steuerelement mit einem Rahmen von FixedSingle und geben ihm einen 1px schwarzen Rahmen, der an den Anfang eines Formulars angedockt ist. Sie fügen ein zweites Panel-Steuerelement mit derselben Umrandung hinzu und werden auch an der Oberseite angedockt. Dadurch wird diese Fläche unter dem ersten Panel gestapelt. Das Problem ist, wenn der untere Rand des oberen Bereichs den oberen Rand des unteren Bereichs berührt, der Rahmen jetzt 2 Pixel breit ist (unten oben im oberen Bereich (1 Pixel) + oben im unteren Bereich (1 Pixel) = 2 Pixel).

Ich habe mich mit den Panel-Steuereigenschaften beschäftigt, aber ich konnte nichts sehen, dass sich diese berührenden Kanten überlappen, also gibt es nur 1px Grenze zwischen den Panels. Hat jemand Ideen?

Antwort

1

Erstellen Sie einfach Ihre eigenen Panel abgeleiteten Kontrolle. Fake die Grenze, indem Sie es so zeichnen, wie Sie es wollen. Beispiel:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

public class MyPanel : Panel { 
    public MyPanel() { 
    this.Dock = DockStyle.Top; 
    this.DoubleBuffered = true; 
    this.SetStyle(ControlStyles.ResizeRedraw, true); 
    } 
    protected override void OnPaintBackground(PaintEventArgs e) { 
    base.OnPaintBackground(e); 
    int y = this.ClientSize.Height - 1; 
    int x = this.ClientSize.Width-1; 
    e.Graphics.DrawLine(Pens.Black, 0, 0, 0, y); 
    e.Graphics.DrawLine(Pens.Black, 0, y, x, y); 
    e.Graphics.DrawLine(Pens.Black, x, 0, x, y); 
    } 
} 

Fügen Sie Ihrem Projekt eine neue Klasse hinzu und fügen Sie den oben angezeigten Code ein. Kompilieren. Legen Sie das neue Steuerelement oben in der Toolbox auf Ihr Formular ab.

+0

Ich werde das Montag ausprobieren. Vielen Dank! – HardCode

0

Wie die meisten integrierten Bedienelementen (I Visual Basic .NET 2008 bin mit), die Eigenschaft border Panel ist ein Alles-oder-Nichts-Art von Eigentum. Es wäre praktisch zu spezifizieren, welche Seiten eines Panels Grenzen bekommen, aber leider nein. Wenn Sie eine Rasteransicht mit wenigen Zellen erstellen möchten, sollten Sie die Daten (und die zugehörigen Rasterlinien) möglicherweise lieber selbst in ein einzelnes Bedienfeld übertragen.

Verwandte Themen