- 題名: テキストボックス内の改行位置について
- 日時: 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等も検討しているのですが、よいものが見つかりません。
よろしくお願い致します。