web-dev-qa-db-fra.com

Comment changer la couleur de la bordure du panneau

IDE: Visual Studio, C # .net, Type = application de formulaire Windows

Bonjour, Dans Propriétés du panneau, j’ai défini le style de bordure sur Fixe unique ".
lorsque je lance mon application, cela me donne la couleur grise. Je ne sais pas comment changer la couleur de la bordure ..__ J'ai essayé dans l'événement Paint du panneau

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

sa me donnant la frontière comme ceci:

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

et je veux une bordure unique fixe comme ceci: 

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

Je suis capable d’obtenir FixedSingle Border mais c’est en gris qui est le défaut par système ou IDE.

Donc, les pls me suggèrent comment je le fais en couleur jaune.

18
yogeshkmrsoni002

Vous pouvez créer votre propre classe Panel et dessiner une bordure dans la zone client:

[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

J'ai trouvé ce post utile:

https://vicky4147.wordpress.com/2007/03/04/how-to-draw-a-custom-border-around-a-form-or-control/

Je règle également le rembourrage du panneau sur l'épaisseur de la bordure afin que les commandes à l'intérieur du panneau ne chevauchent pas la bordure et ne la masquent pas. Dans mon cas, je n'utilisais pas le rembourrage autrement, donc c'était une bonne solution, mais les choses pourraient devenir plus compliquées si vous envisagiez également d'utiliser le rembourrage pour plus que l'affichage de la bordure ...

5
JPProgrammer

juste au cas où vous ne voudriez pas créer un panneau personnalisé en tant que Sinatra répondu:

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

Si vous ne souhaitez pas vous soucier de sous-classer un panneau, vous pouvez simplement créer un autre panneau de 2 pixels plus grand dans chaque dimension, lui attribuer la couleur de la bordure et le placer directement derrière le panneau nécessitant une bordure. C’est juste quelques clics dans le IDE ...

4
AndruWitta

Après une solution de contournement lors de la création de mon panneau personnalisé. J'ai été obligé d'appliquer un autre Tweak pour résoudre le chevauchement des bordures lorsque la taille du ou des contrôles enfants> était de la taille du panneau .

    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