第8回 検索と置換

公開日:2018-05-24

1. 内容

1. 検索・置換機能の追加

メニューの検索をクリック、または Ctrl + F で検索・置換用の検索画面を起動して、検索と置換が行えるようにしました。
検索画面で検索ボタンや置換ボタンがクリックされた場合、直接フォームのテキストを操作するのではなく、検索対象(フォーム)に対して、検索処理依頼を出す形にしています。
実際の検索処理は、検索対象側で行い、検索画面は操作するためのI/Fと言う位置付けです。
これにより、今後、検索画面を別のものと入れ替えたり、ツールバーで操作させると言うことができます。

また、検索対象を扱う場合は、MainForm ではなく、ISearchString と言う interface で扱っています。
これにより、ISearchString を実装した別アプリなどに対しても、今回の検索画面をそのまま再利用することができます。

2. StringComparison について

検索処理は IndexOf()、LastIndexOf() を使用していますが、StringComparison を指定すると、
カルチャを意識した文字列の比較ができます。

ソース
var list = new List{
	"オルガン", 
	"ウクレレ", 
	"エレクトーン", 
	"アコーディオン", 
	"ヴァイオリン", 
	"イングリッシュホルン"
};

list.Sort((a, b) => String.Compare(a, b, StringComparison.CurrentCulture));
foreach (var item in list) Console.WriteLine(item);
Console.WriteLine("----------");

list.Sort((a, b) => String.Compare(a, b, StringComparison.InvariantCulture));
foreach (var item in list) Console.WriteLine(item);
Console.WriteLine("----------");

list.Sort((a, b) => String.Compare(a, b, StringComparison.Ordinal));
foreach (var item in list) Console.WriteLine(item);
実行結果
アコーディオン
イングリッシュホルン
ヴァイオリン
ウクレレ
エレクトーン
オルガン
----------
アコーディオン
イングリッシュホルン
ヴァイオリン
ウクレレ
エレクトーン
オルガン
----------
アコーディオン
イングリッシュホルン
ウクレレ
エレクトーン
オルガン
ヴァイオリン
Ordinal または OrdinalIgnoreCase を指定すると、Unicodeの定義された順番でソートされます。
それ以外を指定すると、日本語の順番でソートされ、「ヴ」は「ウ」の前に移動します。
「ヴ」は「ウ」の後ろになって欲しいところですが。

【参考】.NET の文字列を使用するためのベスト プラクティス

3. Configファイルの読込、保存の修正

前回はMainForm側で値の反映などを行っていましたが、MainForm側の処理を軽くするため、Configファイルの読込、保存、Formへの反映処理を、全てAppConfigクラス側で行うように修正しました。

初めは、AppConfigクラスはデータ(プロパティ)だけ定義して、AppConfig操作クラスで読込と保存、Form側で値の反映処理を行おうと考えました。
データクラスと操作クラスに分けることにより、データクラスがXMLファイルと依存しなくなり、他の媒体のデータも扱えるようにするためです。

しかし、処理を分けると柔軟になる反面、使う側はコントロールする処理が多くなります。
そこで今回は、クラスの使用者がいかに簡単に使えるかを最優先として、全てAppConfigに処理をまとめるようにしました。

2. 動画


3. 画面




4. 今後の課題

1. ドラッグ&ドロップでファイルオープン

エクスプローラーからファイルをドラッグ&ドロップしてファイルを開けるようにする。

2. 変換機能

大文字・小文字変換、半角・全角変換、10進数・16進数の変換を、ポップアップメニューで行えるようにする。

3. インデント調整など。

行を選択して、TABキーでインデント調整ができるようにする。

4. 独自のテキストボックスの作成

リッチテキストボックスを継承して、独自のテキストボックスの作成する。
これにより、Formの処理を軽くすることができる。

5. その他

grep、選択した数式の計算、タブ化、ファイルツリー・リストを付けた3ペイン構成にする、プラグインでテキストの加工を行えるようにする、プラグインでカレンダーをつけて日記をつけられるようにする、などなど。

ダウンロード

ver実行ファイルソース
1.0.7
2018/05/24
ncm_1_0_7.zipncm_1_0_7_src.zip