アプリケーションのメニューアイテムを選択できないようするためのコードをどこに記述するかという問題。もっとも直感的なのは、そういう状態になる場所に書くというもの。しかしこれだと、コードがあちこちに散らばって、いざメニューアイテムが無効になっているのはどうしてなのかといったとき調べるのが大変になるし、本来無効なのに有効になっているのはどうしてなのかといったときも大変になる。
MFCではCOMMAND_UPDATEのような機構が導入されて、メニューアイテムの無効などのコードはこのメニューが表示される直前に実行されていてここで一元管理されていた。ツールバーの場合などはアイドル処理のとき動かしていた。
.NET Frameworkにはこのような機構がないので、MFCと同じようにDropdownopeningハンドラでメニューアイテムの有効/無効を切り替えたくなるが、.NET2.0のToolStripMenuItemのショートカットキーはこのメニューアイテムが無効だと機能しないので、MFCのようにやろうとすると困ることになる。
とりあえず対策としては、Dropdownclosedの時に全部有効に戻して、表示されているとき意外は常に有効にしておくことが上げられると思う。