Pintar texto en el botón - Diferencia en el aspecto
Frecuentes
Visto 2,932 veces
2
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:
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?
2 Respuestas
0
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
0
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 c# winforms fonts paint or haz tu propia pregunta.
¿Qué fuente está usando? - Falle1234
@Falle1234, Fuente - Arial Rounded MT Negrita, 9 puntos - Tvd
Considere usar el
TextRenderer.DrawText
método, en cambio. - Cody GrayHe 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. - Falle1234
Nunca he probado nada de esto, pero de forma predeterminada se agrega un código al
Program
clase:Application.EnableVisualStyles();
yApplication.SetCompatibleTextRenderingDefault(false);
- ¿Podrían tener algo que ver con el problema? Es posible que no se establezcan durante el diseño. - C.Evenhuis