TabControlでTabPageを無効にする

Windowsフォームアプリケーションで、タブを選択できないようにする方法。

参考: System.Windows.Controlsの紹介 - TabControl - Yuya Yamaki’s blog

これが結構やっかいで、調べてみると、惑わされてる人も多い。

WPFアプリケーションだと IsEnabled プロパティがあって、それを False にすると選択できなくなる。 非常に直感的でわかりやすい。

だが、Windowsフォームでは IsEnabled プロパティはない。

そして、Enabled プロパティも一見ないように見える。 なぜならばプロパティウィンドウに表示されないから。

コードでしか変更できないプロパティもあったような気がするので、 コードで書いてみることにする。

tabPage1. とタイプし、IntelliSense を表示させても Enabled は出てこない。

しかし、tabPage1.Enabled = false; としてもエラーにならない。

ビルドして確認すると、タブ自体は選択できるが、確かにタブ上のコントロールが全て無効になっている。

とりあえず、Windowsフォームで簡単にできる方法としてはこれが限界のようだ。

しかし、IntelliSense が出てこないのが気になったので調べてみた。

すると、以下のように定義されていた。

f:id:posnum:20141004213935p:plain

なるほど。

[Browsable(false)]でプロパティウィンドウ非表示。

[EditorBrowsable(EditorBrowsableState.Never)]でIntelliSense非表示。

とのことらしい。

このメンバーは無効です、といっている割にはしっかり効いてるけど。

参考: 公開プロパティを隠す為の考察: C#研究所