第14回 プラグイン化
公開日:2018-09-02 更新日:2019-05-14
[メモ帳作成講座]
1. 内容
1. 概要
複数のテキストファイルを開けるようにするため、テキストエディター部分のプラグイン化を行いました。
基本的な各機能と処理はほぼ同じです。
基本的な各機能と処理はほぼ同じです。
2. プラグイン操作用インターフェースの追加
前回まではメインフォームにあるテキストボックスを直接操作していましたが、今回からはプラグイン操作用インターフェースを通して、間接的に操作するようにしました。これにより、操作対象が抽象化されテキストボックスに限定されなくなります。インターフェースが一致すれば、メニューの編集、検索などを使用して、いろんなプラグインを操作することができるようになります。
3. テキストエディタープラグインの追加
ユーザコントロールを追加して、メインフォームにあったテキストボックスと処理を移動しました。イメージ的には、ユーザコントロールが以前のフォームにあたります。またプラグインは、デザイン時に静的に配置せずに、ファイルを開くタイミングで動的に生成してフォームに配置します。
4. プラグインからフォームへの状態の通知
現在はフォームのみですが、今後はタブや別のプラグインに状態を通知する可能性があるため、いろんな対象に通知できるようにする必要があります。
今回は、追加した PluginManager クラスに TitleChanged イベントを持たせ、そのイベントをフォームで受け取ることで、プラグインからフォームへ状態の変化を通知しています。
但し、今後はタイトル以外も通知する必要が出てくるため、新たにイベントの仕組みを実装する予定です。
今回は、追加した PluginManager クラスに TitleChanged イベントを持たせ、そのイベントをフォームで受け取ることで、プラグインからフォームへ状態の変化を通知しています。
但し、今後はタイトル以外も通知する必要が出てくるため、新たにイベントの仕組みを実装する予定です。
5. プラグインの生成について
現在はテキストエディターだけですが、今後はファイルの拡張子に応じてプラグインを生成する予定です。
そのため、new TextEditorPlugin() のように固定で生成するのではなく、Activator.CreateInstance(クラスの型) を使用して、任意のクラスのオブジェクトを生成できるようにしてあります。
また、今回は暫定的に PluginManager クラス内で TextEditorPlugin を使用している箇所がありますが、今後はフルクラス名の文字列から Type に変換して、DLL などで定義されたプラグインなども動的に生成できるようにする予定です。
そのため、new TextEditorPlugin() のように固定で生成するのではなく、Activator.CreateInstance(クラスの型) を使用して、任意のクラスのオブジェクトを生成できるようにしてあります。
また、今回は暫定的に PluginManager クラス内で TextEditorPlugin を使用している箇所がありますが、今後はフルクラス名の文字列から Type に変換して、DLL などで定義されたプラグインなども動的に生成できるようにする予定です。
2. 動画
3. 画面
4. 今後の課題
1. 見出しリストの表示
テキストの左側に見出しリストを表示して、クリックされたら本文中の見出しのある位置にカーソルを移動できるようにします。
2. 左側の余白の不具合対応
BOMが入っている場合などに、左側の余白がおかしくなる不具合の対応。なおらんのかもしれへん。
3. grep
指定されたキーワードを含むファイルを検索して一覧で表示する。
そして、一覧でダブルクリックされたら、そのファイルを開くようにする。
そして、一覧でダブルクリックされたら、そのファイルを開くようにする。
4. その他
タブ化、ファイルツリー・リストを付けた3ペイン構成にする、プラグインでテキストの加工を行えるようにする、プラグインでカレンダーをつけて日記をつけられるようにする、などなど。
ダウンロード
ver | 実行ファイル | ソース |
---|---|---|
1.1.0 2018/09/02 | ncm_1_1_0.zip | ncm_1_1_0_src.zip |