注意:ここで紹介している方法は、.NET Framework 2.0以降でのみ使用できます。
ToolStripコントロールに表示されている項目(ToolStripItem)を表示または非表示にするには、ToolStripItem.Visibleプロパティを使えばよさそうですが、そう単純ではありません。ToolStripItemにはこれと同じような目的に使用する、Availableプロパティというものが存在するのです。
両者の違いについてMSDNの「ToolStripItem.Availableプロパティ」には、次のように書かれています(そのまま引用します)。
「Available プロパティは、Visible プロパティとは異なります。Available が ToolStripItem を表示するかどうかを示すのに対し、Visible は ToolStripItem およびその親を表示するかどうかを示します。Available と Visible のいずれかを true または false に設定すると、他のプロパティも true または false に設定されます。」
つまり、両者は値の設定に関しては全く同じですが、取得される値は異なる場合があります。Availableプロパティは、単純にそのToolStripItemを表示する設定になっているかどうかを示します。これに対してVisibleプロパティは、現在そのToolStripItemが画面に表示されているかどうかを示します。
例えば、AvailableプロパティがFalseであれば、Visibleプロパティは常にFalseです。しかしAvailableプロパティがTrueであっても、親のToolStripやToolStripItemが非表示だったら、VisibleプロパティはFalseです。親が存在していない場合や、ToolStripItemがメニューのサブ項目で、その項目が画面に表示されていない場合、オーバーフローメニューに入って表示されていない場合などでも、VisibleプロパティはFalseになります。(しかし、オーバーフローメニューに入らずに表示されない場合は、VisibleプロパティもTrueになります。)
補足:Visual StudioのフォームデザイナのプロパティにはVisibleプロパティのみ表示され、Availableプロパティは表示されませんが、設定に関してはどちらも同じことを考えると、納得できます。
補足:以前この記事で、別のToolStripItemの子となっているToolStripMenuItemの場合はAvailableプロパティをFalseにすることにより非表示にできるが、VisibleプロパティをFalseにしても非表示にできないと書いていましたが、その後このような現象は確認できませんでした。
(この記事は、「.NETプログラミング研究」で紹介したものを基にしています。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。