テキストに特別な書式を適用するには、StringFormat オブジェクトを初期化し、そのオブジェクトのアドレスを Graphics クラスの DrawString メソッドに渡します。
書式設定したテキストを四角形内に描画するには、Graphics、FontFamily、Font、RectF、StringFormat、Brush の各オブジェクトが必要です。
テキストの配置
テキストを四角形内に描画する例を次に示します。テキストの各行は中央揃えで配置され、テキスト ブロック全体は四角形内の上から下方向の中央に揃えて配置されます。
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);
四角形および中央揃えで配置されたテキストを次の図に示します。
上のコードでは、StringFormat オブジェクトの 2 つのプロパティ、Alignment と LineAlignment を設定しています。Alignment プロパティは、テキストの各行が、DrawString メソッドに渡される四角形内で水平方向の中央に揃えて配置されるように指定します。LineAlignment プロパティは、テキスト ブロックが四角形内で垂直方向 (上から下) の中央に揃えて配置されるように指定します。
値 Center は、StringAlignment 列挙体のメンバです。
タブ ストップの設定
テキストにタブ ストップを設定するには、StringFormat オブジェクトの SetTabStops メソッドを呼び出し、StringFormat オブジェクトを Graphics クラスの DrawString メソッドに渡します。
150、250、350 の各位置にタブ ストップを設定する例を次に示します。このコードは、名前とテストの得点とをタブで区切ったリストを表示します。
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);
表示されるタブ区切りのテキストを次の図に示します。
上のコードでは、SetTabStops メソッドに 2 つの引数を渡します。2 番目の引数は、タブのオフセットを格納している配列です。SetTabStops に渡される最初の引数は 0 で、この値は、配列内の最初のオフセットが 0 の位置、つまり外接する四角形の左端から測定されることを示します。
垂直方向のテキストの描画
StringFormat オブジェクトを使用して、テキストを水平方向ではなく垂直方向に描画するように指定できます。
値 DirectionVertical を StringFormat オブジェクトの FormatFlags プロパティに割り当てる例を次に示します。この StringFormat オブジェクトが、Graphics クラスの DrawString メソッドに渡されます。値 DirectionVertical は、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);
表示される垂直方向のテキストを次の図に示します。