文字列を折り返して描画する (ワードラップした文字列を描画する) - C#
文字列を折り返して描画するコードを紹介します。
概要
長い文字列を指定した領域内で、ワードラップして文字列を描画したい場合があります。
この記事では、ワードラップした文字列を描画するコードを紹介します。
ワードラップした文字列を描画する方法として、GraphicsオブジェクトのDrawString メソッドを利用する方法と、
TextRendererクラスを利用する方法があります。
プログラム:Graphics.DrwaString メソッドを利用する方法
UI
下図のフォームを作成します。
フォームにPanelコントロールを配置します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DrawStringWordWrap
{
public partial class FormWordWrapDraw : Form
{
public FormWordWrapDraw()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Pen p = new Pen(Color.FromArgb(0x45,0x72,0xAA));
Rectangle r = new Rectangle(128, 32, 128, 160);
e.Graphics.DrawRectangle(p,r);
string DrawText = "A big penguin dreams of climbing the highest mountain in the world.";
Font f = new Font("Meiryo",10);
SolidBrush b = new SolidBrush(Color.Black);
e.Graphics.DrawString(DrawText, f, b, r);
}
}
}
解説
以下はテキストが描画される範囲の枠を描画するコードです。
Pen p = new Pen(Color.FromArgb(0x45,0x72,0xAA));
Rectangle r = new Rectangle(128, 32, 128, 160);
e.Graphics.DrawRectangle(p,r);
画面に描画する文字列を用意します。
string DrawText = "A big penguin dreams of climbing the highest mountain in the world.";
描画するフォントとブラシを作成します。
Font f = new Font("Meiryo",10);
SolidBrush b = new SolidBrush(Color.Black);
GraphicsオブジェクトのDrawStringメソッドを呼び出します。第四引数に描画領域となるRectangleオブジェクトを与えると、
Rectangleの領域のサイズに合わせてテキストがワードラップされて描画されます。
e.Graphics.DrawString(DrawText, f, b, r);
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。枠の大きさに合わせてワードラップされて描画される動作が確認できます。
プログラム:TextRenderer.DrawText メソッドを利用する方法
UI
下図のフォームを作成します。
フォームにPanelコントロールを配置します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DrawStringWordWrap
{
public partial class FormWordWrapDraw : Form
{
public FormWordWrapDraw()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Pen p = new Pen(Color.FromArgb(0x45,0x72,0xAA));
Rectangle r = new Rectangle(128, 32, 128, 160);
e.Graphics.DrawRectangle(p,r);
string DrawText = "A big penguin dreams of climbing the highest mountain in the world.";
Font f = new Font("Meiryo",10);
TextRenderer.DrawText(e.Graphics, DrawText, f, r, Color.Black, TextFormatFlags.WordBreak);
}
}
}
解説
以下はテキストが描画される範囲の枠を描画するコードです。
Pen p = new Pen(Color.FromArgb(0x45,0x72,0xAA));
Rectangle r = new Rectangle(128, 32, 128, 160);
e.Graphics.DrawRectangle(p,r);
画面に描画する文字列を用意します。
string DrawText = "A big penguin dreams of climbing the highest mountain in the world.";
描画するフォントを作成します。
Font f = new Font("Meiryo",10);
TextRendererクラスの、DrwaTextメソッドを呼び出し画面にテキストを描画します。
第四引数にテキストを描画する領域を与え、TextFormatFlagsに
TextFormatFlags.WordBreak
を設定することで、文字列を両機の幅に合わせてワードラップして描画できます。
TextRenderer.DrawText(e.Graphics, DrawText, f, r, Color.Black, TextFormatFlags.WordBreak);
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。枠の大きさに合わせてワードラップされて描画される動作が確認できます。
DrawStringメソッドの場合と同じフォント、フォントサイズを使用して描画していますが、描画結果が違うことがわかります。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用