.NET Framework 2.0 から新しく追加されたセパレータ(ToolStripSeparator クラス)をコンテキストメニューなどで表示して、それをクリックするとメニューが閉じてしまいます。この動きおかしくないですか?

 前までのセパレータ(MenuItem クラスの Text プロパティに "-" を設定したもの)ではそんな事はありませんでした。クリックしてもメニューは表示されたままです。また Windows 標準のセパレータ(デスクトップのコンテキストメニューに表示されるもの)でも、ToolStripSeparator クラスと同じような外観を持つ Visual Studio 2005 や Microsoft Office 2003 などでもメニューは表示されたままです。なぜか ToolStripSeparator クラスだけがクリックするとメニューが閉じてしまいます。

クリックしてもメニューが閉じないようにするには

 そこで他と同じ動きをするように、クリックしてもメニューが閉じられない方法がないものかと探してみました。ToolStripSeparator メンバ一覧を見てみると CanSelect プロパティと名前からはそれらしいものがあったのですが、ReadOnly で 初期値が False に設定されていたため違いました。

 他にそれらしいものが見当たらないので、こうなったら Enabled プロパティを False にしちゃえと思い MSDN を見たらこんな事が記載されていました。

このプロパティは、.NET Framework インフラストラクチャをサポートします。独自に作成したコードから直接使用するためのものではありません。
このクラスでは、このプロパティは使用されません。

 えっ! 使っちゃダメだし、使用もされないの!

 そんなことはありません。Enabled プロパティを False に設定したら、見事クリックしてもメニューが閉じなくなりました。見た目も変わらずいい感じです。

セパレータ

 でも疑問が残ります。なぜ ToolStripSeparator ではクリックするとメニューが閉じてしまうのか。