private void CreateShortcutContextMenu() { RestoreShortcut(); _contextMenuShortcuts = new ContextMenuStrip(); _contextMenuShortcuts.Opening += (sender, args) => { _contextMenuShortcuts.Items.Clear(); _contextMenuShortcuts.Items.Add("Explorer", null, (o, eventArgs) => _explorerCleaner.OpenExplorer("")); _contextMenuShortcuts.Items.Add(new ToolStripSeparator()); var closedExplorers = _explorerCleaner.ClosedExplorers.OrderByDescending(x => x.IsFavorited) .ThenByDescending(x => x.LastUpdateDateTime).Take(10); foreach (var closedExplorer in closedExplorers) { var item = new ToolStripMenuItem(closedExplorer.LocationPath); item.Image = closedExplorer.IsFavorited ? Resources.favorite : null; item.Click += (o, eventArgs) => _explorerCleaner.OpenExplorer(closedExplorer); _contextMenuShortcuts.Items.Add(item); } if (_shortcuts.Length > 0) { _contextMenuShortcuts.Items.Add(new ToolStripSeparator()); foreach (var shortcutItem in _shortcuts) { _contextMenuShortcuts.Items.Add(shortcutItem.Name, null, (o, eventArgs) => shortcutItem.Exec()); } } args.Cancel = false; }; _contextMenuShortcuts.Closing += (sender, args) => { // 任意のクリックで閉じるが、カーソルがコンテキストメニューにあるときは閉じない(イベントが消えるので) if (args.CloseReason == ToolStripDropDownCloseReason.AppFocusChange && _contextMenuShortcuts.ClientRectangle.Contains( _contextMenuShortcuts.PointToClient(Cursor.Position))) { args.Cancel = true; } }; }