example - paint en c#
Cómo cambiar el color del borde del panel (5)
Después de una solución al crear mi panel personalizado. Me vi obligado a aplicar otro ajuste para resolver la superposición del borde cuando el tamaño del control o controles secundarios> del panel. En el ajuste, en lugar de que el panel dibuje su borde, se dibuja por el control principal.
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
IDE: Visual Studio, C # .net, Type = aplicación de formulario de Windows
Hola, en Propiedades del panel he establecido el estilo de borde en Soltero fijo ".
Cuando estoy ejecutando mi aplicación me está dando color gris. No sé cómo cambiar el color del borde. Lo he intentado en el evento Paint del panel.
private void HCp_Paint(object sender, PaintEventArgs e)
{
Panel p = sender as Panel;
ControlPaint.DrawBorder(e.Graphics, p.DisplayRectangle, Color.Yellow, ButtonBorderStyle.Inset);
}
me está dando la frontera de esta manera:
http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/giving_zps877730fc.png
Y quiero un solo borde fijo como este:
http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/want_zps081e3591.png
Puedo obtener FixedSingle Border pero está en color gris, que es el predeterminado del sistema o IDE.
Así que los pls me sugieren cómo lo hago en color amarillo.
En caso de que no quiera hacer un panel personalizado como respondió Sinatra :
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle, Color.DarkBlue, ButtonBorderStyle.Solid);
}
He encontrado esta publicación útil:
https://vicky4147.wordpress.com/2007/03/04/how-to-draw-a-custom-border-around-a-form-or-control/
También puse el relleno del panel al grosor del borde para que los controles que se encuentran dentro del panel no se superpongan y oculten. En mi caso, no estaba usando el relleno, de lo contrario, era una buena solución, pero las cosas podrían ser más complicadas si también planea usar el relleno por más que solo mostrar el borde ...
Puede crear su propia clase de Panel
y dibujar un borde en el área del cliente:
[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);
}
}
Si no quiere preocuparse por sub-clasificar un panel, puede simplemente crear otro panel de 2 píxeles más grande en cada dimensión, convertirlo en el color del borde y colocarlo directamente detrás del panel que necesita un borde. Esto es sólo unos pocos clics en el IDE ...