要望を受けた最近使ったファイルを実装したので、その私の方法を解説します。
このメニューは recentlyUsedFilesToolStripMenuItem という名前が自動的に付けられました。
以上、参考になれば。
※このゲーム、実在してたのか!?
- メニュー
このメニューは recentlyUsedFilesToolStripMenuItem という名前が自動的に付けられました。
- リストを更新する
この RecentlyUsedFiles リストに使用したパス情報を追加していきます。追加するタイミングは、ファイルの読み込みと保存です。ただ、私が気になるのが存在しないファイルパスが残り続ける事でした。そのため、追加や表示のタイミングで、パスの存在確認をしたいなと考えました。そのため、追加時に存在確認をしてなければリストから消すようにします。また、登録最大数も設定して、超えた分は捨てたいと思います。今回は最大50個まてとしています。
public List<string> RecentlyUsedFiles { get; set; }
この AddRecentlyUsedFiles を読み込みと保存から呼び出すようにします。
//--------------------------------------------------------------- // 最近使ったファイルで存在しないパスを削除する //--------------------------------------------------------------- private static void CheckRecentlyUsedFiles() { for (int idx = RecentlyUsedFiles.Count - 1; idx >= 0; --idx) { if (File.Exists(RecentlyUsedFiles[idx])) continue; RecentlyUsedFiles.RemoveAt(idx); } } //--------------------------------------------------------------- // 最近使ったファイルを追加する //--------------------------------------------------------------- private static void AddRecentlyUsedFiles(string path) { CheckRecentlyUsedFiles(); RecentlyUsedFiles.Remove(path); RecentlyUsedFiles.Insert(0, path); while (RecentlyUsedFiles.Count >= 50) { RecentlyUsedFiles.RemoveAt(RecentlyUsedFiles.Count - 1); } }
Vanton
※ なんかとっても便利そう
※ なんかとっても便利そう
- ドロップメニューの動的追加
最近使ったファイルでの読み込みも最近使ったファイルなので、LoadProjectFile で読み込むときに、パスを最新位置に更新しています。
// ------------------------------------------------------------- // ファイルメニューが開かれる // ------------------------------------------------------------- private void FileMenu_DropDownOpening(object sender, EventArgs e) { CheckRecentlyUsedFiles(); if (RecentlyUsedFiles.Any()) { recentlyUsedFilesToolStripMenuItem.Visible = true; // 最近使ったファイルリストを削除 for (int idx = 0; idx < recentlyUsedFilesToolStripMenuItem.DropDownItems.Count; ++idx) { recentlyUsedFilesToolStripMenuItem.DropDownItems[idx].Dispose(); } recentlyUsedFilesToolStripMenuItem.DropDownItems.Clear(); // 最近使ったファイルリストを追加 for (int idx = 0; idx < 10 && idx < RecentlyUsedFiles.Count; ++idx) { ToolStripMenuItem item = new(RecentlyUsedFiles[idx]) { Tag = idx }; item.Click += new EventHandler(RecentlyUsedFilesToolStripMenuItem_Click); recentlyUsedFilesToolStripMenuItem.DropDownItems.Add(item); } } else { recentlyUsedFilesToolStripMenuItem.Visible = false; } } // ------------------------------------------------------------- // ファイル/最近使ったファイル // ------------------------------------------------------------- private void RecentlyUsedFilesToolStripMenuItem_Click(object sender, EventArgs e) { var menu = (ToolStripMenuItem)sender; string path = RecentlyUsedFiles[(int)menu.Tag]; if (LoadProjectFile(path)) { openFile.FileName = path; PrintAppCaption(); } }
以上、参考になれば。
※このゲーム、実在してたのか!?
コメント