Aplicar formato a texto
Para aplicar un formato especial a texto, inicialice un objeto StringFormat y pase la dirección de dicho objeto al método DrawString de la clase Graphics.
Para dibujar texto con formato en un rectángulo, son necesarios los objetos Graphics, FontFamily, Font, RectF, StringFormat y Brush.
Alinear texto
En el ejemplo siguiente se dibuja texto en un rectángulo. Todas las líneas del texto están centradas y todo el bloque de texto está centrado (de arriba a abajo) en el rectángulo.
Dim myText As String = "Use StringFormat and RectangleF objects to center text in a rectangle."
Dim fontFamily As New FontFamily("Arial")
Dim font As New Font( _
fontFamily, _
12, _
FontStyle.Bold, _
GraphicsUnit.Point)
Dim rect As New Rectangle(30, 10, 120, 140)
Dim stringFormat As New StringFormat()
Dim solidBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
' Center each line of text.
stringFormat.Alignment = StringAlignment.Center
' Center the block of text (top to bottom) in the rectangle.
stringFormat.LineAlignment = StringAlignment.Center
e.Graphics.DrawString(myText, font, solidBrush, RectangleF.op_implicit(rect), stringFormat)
Dim pen As Pen = Pens.Black
e.Graphics.DrawRectangle(pen, rect)
[C#]
string text = "Use StringFormat and RectangleF objects to center text in a rectangle.";
FontFamily fontFamily = new FontFamily("Arial");
Font font = new Font(
fontFamily,
12, FontStyle.Bold,
GraphicsUnit.Point);
Rectangle rect = new Rectangle(30, 10, 120, 140);
StringFormat stringFormat = new StringFormat();
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
// Center each line of text.
stringFormat.Alignment = StringAlignment.Center;
// Center the block of text (top to bottom) in the rectangle.
stringFormat.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(text, font, solidBrush, rect, stringFormat);
Pen pen = Pens.Black;
e.Graphics.DrawRectangle(pen, rect);
En la siguiente ilustración se muestra un rectángulo y el texto centrado.
El código anterior establece dos propiedades del objeto StringFormat: Alignment y LineAlignment. La propiedad Alignment especifica que cada línea de texto se debe centrar horizontalmente en el rectángulo que se pasa al método DrawString. La propiedad LineAlignment especifica que el bloque de texto se debe centrar verticalmente (de arriba a abajo) en el rectángulo.
El valor Center es un miembro de la enumeración StringAlignment.
Configurar tabulaciones
Se pueden establecer tabulaciones para el texto llamando al método SetTabStops de un objeto StringFormat y, a continuación, pasando dicho objeto StringFormat al método DrawString de la clase Graphics.
En el ejemplo siguiente se establecen tabulaciones en 150, 250 y 350. A continuación, el código muestra una lista tabulada de nombres y resultados de pruebas.
Dim myText As String = _
"Name" + ControlChars.Tab + _
"Test 1" + ControlChars.Tab + _
"Test 2" + ControlChars.Tab + _
"Test 3" + ControlChars.Cr
myText = myText + "Joe" + ControlChars.Tab + _
"95" + ControlChars.Tab + _
"88" + ControlChars.Tab + +
"91" + ControlChars.Cr
myText = myText + "Mary" + ControlChars.Tab + _
"98" + ControlChars.Tab + _
"84" + ControlChars.Tab + _
"90" + ControlChars.Cr
myText = myText + "Sam" + ControlChars.Tab + _
"42" + ControlChars.Tab + _
"76" + ControlChars.Tab + _
"98" + ControlChars.Cr
myText = myText + "Jane" + ControlChars.Tab + _
"65" + ControlChars.Tab + _
"73" + ControlChars.Tab + _
"92" + ControlChars.Cr
Dim fontFamily As New FontFamily("Courier New")
Dim font As New Font( _
fontFamily, _
12, _
FontStyle.Regular, _
GraphicsUnit.Point)
Dim rect As New Rectangle(10, 10, 450, 100)
Dim stringFormat As New StringFormat()
Dim solidBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
Dim tabs As Single() = {150, 100, 100, 100}
stringFormat.SetTabStops(0, tabs)
e.Graphics.DrawString(myText, font, solidBrush, RectangleF.op_implicit(rect), stringFormat)
Dim pen As Pen = Pens.Black
e.Graphics.DrawRectangle(pen, rect)
[C#]
string text = "Name\tTest 1\tTest 2\tTest 3\n";
text = text + "Joe\t95\t88\t91\n";
text = text + "Mary\t98\t84\t90\n";
text = text + "Sam\t42\t76\t98\n";
text = text + "Jane\t65\t73\t92\n";
FontFamily fontFamily = new FontFamily("Courier New");
Font font = new Font(
fontFamily,
12,
FontStyle.Regular,
GraphicsUnit.Point);
Rectangle rect = new Rectangle(10, 10, 450, 100);
StringFormat stringFormat = new StringFormat();
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
float[] tabs = {150, 100, 100, 100};
stringFormat.SetTabStops(0, tabs);
e.Graphics.DrawString(text, font, solidBrush, rect, stringFormat);
Pen pen = Pens.Black;
e.Graphics.DrawRectangle(pen, rect);
En la siguiente ilustración se muestra el texto tabulado.
El código anterior pasa dos argumentos al método SetTabStops. El segundo argumento es una matriz que contiene los desplazamientos de las tabulaciones. El primer argumento que se pasa a SetTabStops es 0, lo que indica que el primer desplazamiento de la matriz se mide desde la posición 0, el borde izquierdo del rectángulo delimitador.
Dibujar texto vertical
Se puede utilizar un objeto StringFormat para especificar que el texto se dibuje en vertical y no en horizontal.
En el siguiente ejemplo se asigna el valor DirectionVertical a la propiedad FormatFlags de un objeto StringFormat. Dicho objeto StringFormat se pasa al método DrawString de la clase Graphics. El valor DirectionVertical es un miembro de la enumeración StringFormatFlags.
Dim myText As String = "Vertical text"
Dim fontFamily As New FontFamily("Lucida Console")
Dim font As New Font( _
fontFamily, _
14, _
FontStyle.Regular, _
GraphicsUnit.Point)
Dim pointF As New PointF(40, 10)
Dim stringFormat As New StringFormat()
Dim solidBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical
e.Graphics.DrawString(myText, font, solidBrush, pointF, stringFormat)
[C#]
string text = "Vertical text";
FontFamily fontFamily = new FontFamily("Lucida Console");
Font font = new Font(
fontFamily,
14,
FontStyle.Regular,
GraphicsUnit.Point);
PointF pointF = new PointF(40, 10);
StringFormat stringFormat = new StringFormat();
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
e.Graphics.DrawString(text, font, solidBrush, pointF, stringFormat);
En la siguiente ilustración se muestra el texto vertical.