Bordes redondeados en el botón C # (WinForms)

Es un botón de bordes redondeados

Hola, a través de algunas investigaciones por aquí y otros sitios, hice un botón de bordes redondeados.

protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Rectangle Rect = new Rectangle(0, 0, this.Width, this.Height); GraphicsPath GraphPath = new GraphicsPath(); GraphPath.AddArc(Rect.X, Rect.Y, 50, 50, 180, 90); GraphPath.AddArc(Rect.X + Rect.Width - 50, Rect.Y, 50, 50, 270, 90); GraphPath.AddArc(Rect.X + Rect.Width - 50, Rect.Y + Rect.Height - 50, 50, 50, 0, 90); GraphPath.AddArc(Rect.X, Rect.Y + Rect.Height - 50, 50, 50, 90, 90); this.Region = new Region(GraphPath); } 

El problema que estoy enfrentando es el “resaltado azul” del botón: se muestra en la mayor parte del botón, pero no se muestra en los bordes redondeados, por lo que mi botón está resaltado en parte y parte no resaltada (en los bordes). ¿Qué podría hacer para resolver esto? Gracias.

PD: No puedo usar WPF. La aplicación es para una computadora muy vieja; así que, por favor, no lo sugieras. Además, el cliente no tiene el dinero para comprar una computadora más nueva.

Este es rápido, puede ajustar las cosas y optimizar algunos detalles.

 class RoundedButton : Button { GraphicsPath GetRoundPath(RectangleF Rect, int radius) { float r2 = radius / 2f; GraphicsPath GraphPath = new GraphicsPath(); GraphPath.AddArc(Rect.X, Rect.Y, radius, radius, 180, 90); GraphPath.AddLine(Rect.X + r2, Rect.Y, Rect.Width - r2, Rect.Y); GraphPath.AddArc(Rect.X + Rect.Width - radius, Rect.Y, radius, radius, 270, 90); GraphPath.AddLine(Rect.Width, Rect.Y + r2, Rect.Width, Rect.Height - r2); GraphPath.AddArc(Rect.X + Rect.Width - radius, Rect.Y + Rect.Height - radius, radius, radius, 0, 90); GraphPath.AddLine(Rect.Width - r2, Rect.Height, Rect.X + r2, Rect.Height); GraphPath.AddArc(Rect.X, Rect.Y + Rect.Height - radius, radius, radius, 90, 90); GraphPath.AddLine(Rect.X, Rect.Height - r2, Rect.X, Rect.Y + r2); GraphPath.CloseFigure(); return GraphPath; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); RectangleF Rect = new RectangleF(0, 0, this.Width, this.Height); GraphicsPath GraphPath = GetRoundPath(Rect, 50); this.Region = new Region(GraphPath); using (Pen pen = new Pen(Color.CadetBlue, 1.75f)) { pen.Alignment = PenAlignment.Inset; e.Graphics.DrawPath(pen, GraphPath); } } } 

Obviamente, dado que tenemos una clase, podemos guardar en caché el GraphicsPath en una variable de clase. Y, por supuesto, eliges el color …

enter image description here

Puede usar un WebBrowser, hacer un botón con HTML y CSS, luego usar webbrowser.DocumentText = "your html";

A menos que lo pintes tú mismo, no creo que haya nada que puedas hacer. La lógica de la pintura del botón base no está escrita como “mostrar un resaltado azul alrededor de tal y tal porción de lo que sea la región de la ventana”. En cambio, está escrito con el tipo de región que espera: uno rectangular. Entonces, la pintura base siempre pinta una imagen rectangular en una forma recortada. Tendrá un tiempo más fácil de tales cosas en WPF.