webentwicklung-frage-antwort-db.com.de

So ändern Sie die Panel-Rahmenfarbe

IDE: Visual Studio, C # .net, Type = Windows-Formularanwendung

Hallo, In den Panel-Eigenschaften habe ich den Randstil auf Fixed Single festgelegt.
Wenn ich meine Anwendung starte, wird mir die graue Farbe angezeigt. Ich weiß nicht, wie man die Rahmenfarbe ändert ... Ich habe es im Paint Event von Panel versucht

private void HCp_Paint(object sender, PaintEventArgs e)
{
    Panel p = sender as Panel;
    ControlPaint.DrawBorder(e.Graphics, p.DisplayRectangle, Color.Yellow, ButtonBorderStyle.Inset);
}

es gibt mir die Grenze wie folgt:

http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/giving_zps877730fc.png

und ich möchte einen festen Rand wie folgt: 

http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/want_zps081e3591.png

Ich bin in der Lage, FixedSingle Border zu erhalten, aber es ist in der Farbe Grau, die standardmäßig vom System oder der IDE übernommen wird.

Also pls mir vor, wie ich es in gelber Farbe mache.

18

Sie können eine eigene Panel-Klasse erstellen und im Client-Bereich einen Rahmen zeichnen:

[System.ComponentModel.DesignerCategory("Code")]
public class MyPanel : Panel
{
    public MyPanel() 
    {
        SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        using (SolidBrush brush = new SolidBrush(BackColor))
            e.Graphics.FillRectangle(brush, ClientRectangle);
        e.Graphics.DrawRectangle(Pens.Yellow, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
    }

}
12
Sinatr

Ich fand diesen Beitrag hilfreich:

https://vicky4147.wordpress.com/2007/03/04/wie-der-zum-auch-auchzoll-bord-around-aform-or-control/

Ich stelle auch die Auffüllung des Panels auf die Stärke des Randes ein, so dass Steuerelemente im Panel den Rand nicht überlappen und ihn ausblenden. In meinem Fall habe ich die Polsterung sonst nicht verwendet, also war es eine gute Lösung, aber es könnte schwieriger werden, wenn Sie die Polsterung auch für mehr als nur die Grenze verwenden möchten.

5
JPProgrammer

nur für den Fall, dass Sie kein benutzerdefiniertes Panel erstellen möchten als Sinatra antwortete:

private void panel1_Paint(object sender, PaintEventArgs e)
{
     ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle, Color.DarkBlue, ButtonBorderStyle.Solid);
}
4
Raihan Al-maMun

Wenn Sie sich nicht die Mühe machen möchten, ein Panel zu untergliedern, können Sie einfach ein weiteres Panel erstellen, das in jeder Dimension um 2 Pixel größer ist, die Rahmenfarbe festlegen und direkt hinter dem Panel platzieren, das einen Rahmen benötigt. Dies sind nur ein paar Klicks in der IDE ...

4
AndruWitta

Nach einer Problemumgehung beim Erstellen meines benutzerdefinierten Bedienfelds. Ich musste ein anderes Tweak anwenden, um die Überlappung des Rahmens zu lösen, wenn die Größe des untergeordneten Steuerelements> Größe des Bedienfelds. In dem Tweak anstelle des Bedienfelds, das den Rahmen zeichnet, wird es vom übergeordneten Steuerelement gezeichnet.

    Public Class SharpPanel : Inherits Panel
      Sub New()
        Padding = New Padding(2)
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        SetStyle(ControlStyles.ResizeRedraw, True)
        SetStyle(ControlStyles.UserPaint, True)
        SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        SetStyle(ControlStyles.ContainerControl, True)
        SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
        SetStyle(ControlStyles.ContainerControl, True)
        Width = 100
        Height = 100
        TabStop = False
     End Sub
     Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        MyBase.OnPaint(e)
        Dim p As Control = Me.Parent
        Dim gr As Graphics = p.CreateGraphics
        Dim rec As Rectangle = Me.ClientRectangle
        If Me.VerticalScroll.Visible Then
            rec.Width = rec.Width + SystemInformation.VerticalScrollBarWidth
        End If
        If Me.HorizontalScroll.Visible Then
            rec.Height = rec.Height + SystemInformation.HorizontalScrollBarHeight
        End If
        rec.Location = Me.Location
        rec.Inflate(1, 1)
        gr.DrawRectangle(New Pen(Color.Pink), rec)
End sub
End Class
0
Albert Alberto