.NETアプリのTextBoxで、Ctrl + Aで全選択できたりできなかったりする件

.NETのアプリのTextBoxで、Ctrl + Aで全選択できたりできなかったりする。これの意味がよくわかんなかったので、調査した。

要はVisualStyles

Windows 2000Windows Vistaの環境で、.NET 1.1と.NET 2.0のアプリを作って試してみた。

Windows 2000 Windows Vista
.NET 1.1 × ×
.NET 1.1(VisualStyles有効) ×
.NET 2.0 ×
.NET 2.0(VisualStyles無効) × ×

このVisualStyleは、.NET 1.1ではデフォルトでオフになっている。Main関数で

Application.EnableVisualStyles()

って書くと有効になる。また、.NET 2.0以降(Visual Studio 2008)ではデフォルトで有効になってるので、上記の記述を削除するとオフになる。またはVBの場合、プロジェクトのプロパティのところの「XP Visual スタイルを有効にする」のチェックを外す。

これらの結果を見ると、つまりはVisualStylesが有効なときのTextBoxはCtrl + Aが使えて、無効なときは使えない、ということになりそう。

しかしVisualStylesはWindows XP以降でしか使えないので、Windows 2000ではどうやってもCtrl + Aは使えないわけだ。これは残念。

自作する方が良さそう

Windows 2000もターゲットに入れるなら、標準機能(VisualStyles)に頼らずにCtrl + Aの処理を自分で実装したほうが確実なのかな。

逆に、VisualStylesが有効な環境なのに自作したCtrl + Aが動いてしまうのはちょっと気持ち悪いけど、仕方ないか。それともVisualStylesの状態を判定して、自前の処理を使うか標準の処理を使うかを自動で切り替えた方がいいのか。めんどそう。