DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ToolStripItemのVisibleとAvailableプロパティの違い
ToolStripItem(ツールバー、メニュー、ステータスバーの項目)が表示されているか調べる

注意:ここで紹介している方法は、.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にしても非表示にできないと書いていましたが、その後このような現象は確認できませんでした。
  • 履歴:
  • 2014/9/15 AvailableプロパティとVisibleプロパティの違いの説明をより詳しく書き直した。設定におけるAvailableプロパティとVisibleプロパティの違いを削除し、補足とした。タイトルを変更。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。