登録している文字列を置換するテキストエディタ
ちょっとした問題が見つかりました。置換元と置換後文字列を設定するとき、タブや改行、スペースだけだとうまく処理がおこなわれません。
説明を簡単にするために以下のようなサンプルプログラムを作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Properties.Settings.Default.Reload(); richTextBox1.Text = Properties.Settings.Default.string1; richTextBox2.Text = Properties.Settings.Default.string2; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.string1 = richTextBox1.Text; Properties.Settings.Default.string2 = richTextBox2.Text; Properties.Settings.Default.Save(); } } |
サンプルプログラムでやっていることは、フォームが閉じられようとしているときに設定を保存して、次回ロードされたらそれを読み込んで表示するだけです。
実際にスペースや改行、タブ文字を入力して終了させ、もう一度起動してみると保存した文字が半角スペースに化けてしまっています。スペースや改行、タブ文字だけでなく他の文字もいっしょだと問題なく動いてくれます。
上はタブ文字だけ入力、下はタブ文字と「a」を入力。
タブ文字も半角スペースも見た目は同じなのでわかりにくいですが、タブ文字が連続した半角スペースに置き換わっています。タブ文字と「a」を入力したものは正常に表示されています。
タブ文字も半角スペース、改行などで実験してみましたが、どうやら「タブ文字も半角スペース、改行だけ」の場合、連続した半角スペースに置き換わってしまいます。さてどうしたものでしょうか?
「タブ文字も半角スペース、改行だけ」ではなく他の文字もいっしょに入力しているのであれば正常に動作するのであれば最初にダミーの文字を付加しておけば問題なさそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Properties.Settings.Default.Reload(); if(Properties.Settings.Default.string1.Length > 0) richTextBox1.Text = Properties.Settings.Default.string1.Substring(1); else richTextBox1.Text = Properties.Settings.Default.string1; if (Properties.Settings.Default.string2.Length > 0) richTextBox2.Text = Properties.Settings.Default.string2.Substring(1); else richTextBox2.Text = Properties.Settings.Default.string2; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.string1 = "X" + richTextBox1.Text; Properties.Settings.Default.string2 = "X" + richTextBox2.Text; Properties.Settings.Default.Save(); } } |
テストしてみると問題なく動作しています。