komorebikoboshiのブログ

プログラミング記事(趣味レベル)が多め。

改行文字の怖い話

とりあえずおもむろにVisual C#をたちあげて、TextBox貼ってAcceptsReturnとMultilineプロパティをTrueにする。DockもFillで。それからFormのLoadイベントを書いていく。

private void Form1_Load(object sender, EventArgs e)
{
    textBox1.Text = "aaaa\nbbbb";//←
}

TextBoxに表示するだけの簡単なコード。「aaaa」「bbbb」の間に改行が入っているので

aaaa
bbbb

と表示されると期待される。でも実際は、

しかも、行の最後にカーソルを合わしてひとつずつ左キーを押していくと、bとaの境目で一回カーソルが動かない時がある。なにこれこわい。

あくりょーたいさん

改行コードの問題ですね。Windowsでは標準で「CR+LF」の改行コードが使われているけど、"\n"は「LF」のみ表している、とかなんとか。"\n"を"\r\n"と書けば期待通りの動作をします。
「最初からそう書けよ!」って言われればそうなんですが、大学ではじめてC言語を触った時に「改行は\n、改行は\n」と刷り込まれてしまってそれが今まで抜けきらない。あと、\r\n決め打ちもWindows以外の環境で問題が出そうだなぁ、とも。
で、.NET FrameworkではSystem.Environment.NewLineでシステムに合わせた改行文字を挿入してくれるらしいです。

//using System;をしている前提で
textBox1.Text = "aaaa" + Environment.NewLine + "bbbb";

これだとちゃんとaとbのあいだに改行が入る。
こんな感じで、改行文字にはトラウマがあります。aaaaとbbbbがつながって表示されたときは驚愕したよ。そんなわけで、今日も改行はシステムに丸投げしている。