メニューの項目[ファイル」の一番下にこれまで開いたファイルのリストを表示させます。またこれをクリックしたらファイルを開くプログラムにします。

まずメニューを動的に追加するには以下のようにします。

問題のItem_Clickメソッドが呼ばれたらどのような処理をすればいいのでしょうか? 引数のsenderを調べれば、どのメニューアイテムがクリックされたかわかります。そしてToolStripMenuItem.Tagを調べればどのアイテムがクリックされたのかがわかります。

このようにすることでクリックされたアイテムからファイルを開けばいいかわかります。

OpenFile(string filePath)を呼び出せば、ファイルを開くことができます。

なんらかのファイルが開かれたり保存されたら、それを上記の方法で履歴に保存する必要があります。

ところで同じファイルが履歴に複数表示されないようにする必要があります。そこで、

これは保存されているファイルパスのリストを返します。これをつかってすでに格納されているファイルパスを調べて、すでにあるのであれば登録しないようにすればいいですね。

ところで二重起動を禁止するプログラムを作りました。これとの整合性も考える必要があります。

以下のように変更します。

さてファイル履歴を保存してもファイルが削除されることがあります。削除されたファイルは開くことはできないので履歴に表示する意味はないと考えられます。

それで以下のメソッドをつかって取り除きます。

このメソッドはファイル履歴が表示される直前に呼ばれます。

これでファイルの履歴を保存することができます。しかし、これでは不十分です。アプリを終了して再起動したとき、履歴が表示されないのであればファイル履歴を保存する意味はあまりありません。そこでアプリの終了時にこれを保存する方法を考えます。

SaveFileHistry()はファイル履歴に変更が加えられたとき、AddFileHistoryが呼ばれたときに行なうことにします。またSaveFileHistry()で保存されたファイルを読み出してファイル履歴を復活させるLoadFileHistryメソッドはアプリが開始されるときにおこないます。