Formattazione del testo

Per applicare una particolare formattazione al testo inizializzare un oggetto StringFormat e passarne l'indirizzo al metodo DrawString della classe Graphics.

Per creare testo formattati in un rettangolo sono necessari gli oggetti Graphics, FontFamily, Font, RectF, StringFormat e Brush.

Allineamento del testo

Nell'esempio che segue si inserisce testo in un rettangolo. Ogni riga del testo è centrata e l'intero blocco di testo è centrato in senso verticale all'interno del rettangolo.

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);

Nell'illustrazione che segue sono visibili il rettangolo e il testo centrato.

Nel codice precedente sono impostate due proprietà dell'oggetto StringFormat: Alignment e LineAlignment. La proprietà Alignment consente di specificare che ciascuna riga di testo è centrata orizzontalmente rispetto al rettangolo passato al metodo DrawString. La proprietà LineAlignment consente di specificare che il blocco di testo è centrato verticalmente rispetto al rettangolo.

Il valore Center è un membro dell'enumerazione StringAlignment.

Impostazione dei punti di tabulazione

È possibile impostare i punti di tabulazione del testo chiamando il metodo SetTabStops di un oggetto StringFormat e quindi passandolo al metodo DrawString della classe Graphics.

Nell'esempio riportato di seguito i punti di tabulazione vengono impostati sui valori 150, 250 e 350, quindi viene visualizzato un elenco tabulato di nomi e risultati di esami.

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);

Nell'illustrazione che segue si mostra il testo tabulato.

Nel codice precedente vengono passati due argomenti al metodo SetTabStops. Il secondo argomento è una matrice che contiene offset di tabulazione. Il primo argomento passato a SetTabStops è 0, che indica che il primo offset nella matrice viene misurato dalla posizione 0, ovvero il margine sinistro del rettangolo di delimitazione.

Creazione di testo verticale

È possibile utilizzare un oggetto StringFormat per specificare che il testo venga creato in verticale anziché in orizzontale.

Nell'esempio riportato di seguito alla proprietà FormatFlags di un oggetto StringFormat viene assegnato il valore DirectionVertical. Tale oggetto StringFormat viene passato al metodo DrawString della classe Graphics. Il valore DirectionVertical è un membro dell'enumerazione 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);

Nell'illustrazione che segue è visibile il testo verticale.