Pintar texto en el botón - Diferencia en el aspecto

Tengo mi botón personalizado donde anulé OnPaint() y dibujé el texto solo en él. En el tiempo de ejecución, el texto se ve diferente: falta espacio entre los caracteres. Aquí está la imagen del diseño y el tiempo de ejecución del botón: enter image description here

Los métodos de pintura son como:

protected override void OnPaint(PaintEventArgs pevent)
{
    base.OnPaint(pevent);

    if (base.ContainsFocus)
    {
        // Draw inner dotted rectangle when button is on focus
        Pen pen = new Pen(Color.Gray, 3);
        Point p = base.Location;
        pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
        Rectangle rectangle = new Rectangle(4, 4, Size.Width - 8, 
                                            Size.Height - 8);
        ControlPaint.DrawFocusRectangle(pevent.Graphics, rectangle);
    }

    // Draw the string to screen
    SizeF sf = pevent.Graphics.MeasureString(displayText, this.Font, 
                                             this.Width);
    Point ThePoint = new Point();
    ThePoint.X = (int)((this.Width / 2) - (sf.Width / 2));
    ThePoint.Y = (int)((this.Height / 2) - (sf.Height / 2));
    pevent.Graphics.DrawString(displayText, Font, 
              new SolidBrush(Color.FromArgb(255, 255, 254, 255)), ThePoint);
    this.Text = "";
}

¿Alguna idea de dónde me estoy equivocando y cómo solucionarlo?

preguntado el 03 de mayo de 12 a las 08:05

¿Qué fuente está usando? -

@Falle1234, Fuente - Arial Rounded MT Negrita, 9 puntos -

Considere usar el TextRenderer.DrawText método, en cambio. -

He intentado reproducir tu problema pero no he podido. Esto me sugiere que no es un problema con su método onPaint. Tal vez alguna otra configuración en su control de botón personalizado lo esté estropeando de alguna manera. -

Nunca he probado nada de esto, pero de forma predeterminada se agrega un código al Program clase: Application.EnableVisualStyles(); y Application.SetCompatibleTextRenderingDefault(false); - ¿Podrían tener algo que ver con el problema? Es posible que no se establezcan durante el diseño. -

2 Respuestas

Debe configurar el modo de suavizado correcto de esta manera:

Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality

Entonces, el resultado debería verse bien.

contestado el 09 de mayo de 12 a las 07:05

La respuesta de Devils Child afectará la calidad de las líneas y círculos, etc.

Pero para la representación de texto, puede usar:

e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.