- 題名: テキストボックス内の改行位置について
- 日時: 2004/09/17 16:12:47
- ID: 6224
- この記事の返信元:
- (なし)
- この記事への返信:
- [6312] Re[1]: テキストボックス内の改行位置について2004/09/24 16:02:38
- ツリーを表示
■No6224に返信(ゆうこりんさんの記事)
ゆうこりんさん、こんにちは。深山です。
> テキストボックスでマルチライン入力を行う際、
> 改行の位置、スペースの位置を目視できるようにしたいのですが
> (よくあるテキストエディタのような表示をしたいのです)
> よい方法をご存知の方、いないでしょうか?
過去ログに以下のようなやり取りがありました。全て自前で描画してやるのが王道のようです。
テキストエディタの特殊文字
http://dobon.net/vb/bbs/log3-7/4062.html
でも、それだと大変ですよね。ちょーっとチラツキが気になるかも知れませんけど、
次のように WndProc メソッドで WM_PAINT メッセージをキャッチして、必要な記号を
描画するという方法なら簡単にできるかと思います。
# もちろん、それなりですが(^_^;) もう少し工夫すれば多少は改善されるかも?
以下は RichTextBox クラスを継承した例です。改行位置に『↓』を描画してみました。
(正規表現を利用する為に System.Text.RegularExpressions 名前空間を使用しています。)
private const Int32 WM_PAINT = 0x000F;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_PAINT:
Marking();
break;
}
}
private void Marking()
{
using (Graphics g = this.CreateGraphics())
using (Brush brush = new SolidBrush(Color.DarkGreen))
{
// 改行検索
Regex regex = new Regex("\n");
foreach (Match match in regex.Matches(this.Text))
{
// 改行位置取得
Point point = this.GetPositionFromCharIndex(match.Index);
point.Offset(-2, 2); // 出力位置微調整(お好みに応じて)
// 改行記号(ここでは"↓")描画
g.DrawString("↓", this.Font, brush, point);
}
}
}
# TextBox で行う場合は EM_POSFROMCHAR メッセージで GetPositionFromCharIndex メソッドの
# 代用ができる‥‥かなぁ?(未確認)
分類:[.NET]
テキストボックスでマルチライン入力を行う際、
改行の位置、スペースの位置を目視できるようにしたいのですが
(よくあるテキストエディタのような表示をしたいのです)
よい方法をご存知の方、いないでしょうか?
Replace関数などで該当の文字を置き換えてやればよいと思うのですが、
入力の制御が非常に複雑になりそうで、できれば避けたいです。
市販のOCX等も検討しているのですが、よいものが見つかりません。
よろしくお願い致します。