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