tutorial example drawline creategraphics c# .net winforms drawing

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 ...