DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リッチテキストボックス内での改行コードについて

環境/言語:[Windows XP]
分類:[.NET]

いつも参考にさせていただいてます。

マルチライン入力のリッチテキストボックスの値を
DBに登録したいのですが、改行コードがうまく登録できません。

現象はリッチテキストのChr(13)+Chr(10)コードが、自動的にChr(10)に
なってしまうようです。
DB登録時、リッチテキストの値を、String型の変数に格納していますが、
この時点で、コードが変わっています。

これを回避するには、どうしたらよいのでしょうか?
よろしくお願いします。
2004/08/23(Mon) 21:50:24 編集(投稿者)

■No5764に返信(ゆうこりんさんの記事)
> いつも参考にさせていただいてます。
>
> マルチライン入力のリッチテキストボックスの値を
> DBに登録したいのですが、改行コードがうまく登録できません。
>
> 現象はリッチテキストのChr(13)+Chr(10)コードが、自動的にChr(10)に
> なってしまうようです。
> DB登録時、リッチテキストの値を、String型の変数に格納していますが、
> この時点で、コードが変わっています。
>
> これを回避するには、どうしたらよいのでしょうか?
> よろしくお願いします。

何か勘違いしているような気がします。
RichTextBoxで、あなたが“改行”といっているものは、
ラインフィード(vbLf)だと思いますよ。

以下をお試しあれ。

MessageBox.Show(RichTextBox1.Text.IndexOf(Microsoft.VisualBasic.vbLf).ToString()) ’ラインフィード位置が取得される

MessageBox.Show(RichTextBox1.Text.IndexOf(Microsoft.VisualBasic.vbCr).ToString()) ’-1になる(vbCrがない)

MessageBox.Show(RichTextBox1.Text.IndexOf(Microsoft.VisualBasic.vbCrLf).ToString()) ’-1になる(vbCr + vbLfがない)

# vbLfをvbCrLfに置き換えたければ、String.Replace()で置き換えしてください。


知っているかもしれませんが、

Chr(13) = VBの定数では vbCr または ControlChars.Cr と同じ
Chr(10) = VBの定数では vbLf または ControlChars.Lf と同じ

定数を使った方が良いです。(Chr()は関数です)
2004/08/26(Thu) 15:52:03 編集(投稿者)

結局回避できていなくて申し訳ないですが・・・

.NET化にあたりRICHTEXTの仕様が変わったようで、
.TEXTプロパティにvbCrLf混じりの文字列を設定すると
vbLfに変換されるようです。

回避というわけではないのですが、RICHTEXTに書式を設定しない場合は、
この変換が行われないので、フォームをロードした後書式関係のプロパティを触らなければ大丈夫なのかもしれません。
逆にいうと、書式を設定したとたん変換処理されるため、注意が必要となります。

さらにややこしいのは、VB6から引き継いだRICHTEXTでは、
このような処理は走らないため、コードの書き分けが必要です。

私はあきらめて、フォームロード時にRICHTEXT全部に書式設定を行い
文字列取得時にREPLACEすることで解決しました。

#氏名を修正しました。規約違反をお詫びいたします。

DOBON.NET | プログラミング道 | プログラミング掲示板