Gewusst wie: Festlegen von Tabstopps in gezeichnetem Text
Sie können Tabstopps für Text festlegen, indem Sie die SetTabStops-Methode eines StringFormat-Objekts aufrufen und das StringFormat-Objekt anschließend an die DrawString-Methode der Graphics-Klasse übergeben.
Tipp
Der System.Windows.Forms.TextRenderer unterstützt nicht das Hinzufügen von Tabstopps zu gezeichnetem Text, obwohl Sie vorhandene Tabstopps mit dem TextFormatFlags.ExpandTabs-Flag erweitern können.
Beispiel
Im folgenden Beispiel wurden Tabstopps an den Positionen 150, 250 und 350 gesetzt. Durch den Code wird anschließend eine tabstoppgetrennte Liste mit Namen und Testergebnissen ausgegeben.
In der folgenden Abbildung ist der tabstoppgetrennte Text dargestellt.
Im folgenden Code werden zwei Argumente an die SetTabStops-Methode übergeben. Das zweite Argument ist ein Array, das Tabulatoroffsets enthält. Das erste an SetTabStops übergebene Argument lautet 0. Dies bedeutet, dass der erste Offset im Array von Position 0, also der linken Ecke des umschließenden Rechtecks, gemessen wird.
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)
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);
Kompilieren des Codes
- Das vorhergehende Beispiel ist für die Verwendung mit Windows Forms konzipiert und erfordert PaintEventArgs e, einen Parameter von PaintEventHandler.
Siehe auch
Aufgaben
Gewusst wie: Zeichnen von Text mit GDI