シナリオ:
- パネルをフォームに配置します。
- パネルの BorderStyle を FixedSingle に設定します。(実行時に表示されるようにするためです。)
- パネルの AutoScroll=True を設定します
- パネルのアンカーを上、左、下、右に設定します
- パネル内に、任意のサイズのコントロール (ボタン、ピクチャ ボックスなど) を配置します。
- コントロールの下端がパネルの下端からわずか数ピクセル上になるように調整します。
- コントロールの右端を、パネルから垂直スクロールバーの幅を引いた数ピクセル分狭くなるように調整します。(つまり、垂直スクロールバーが表示される余地を残すのに十分なだけ狭くする必要があります。)
これを実行し、フォームのサイズを垂直方向に少し短くして、VERTICAL スクロールバーが表示されるようにします。
問題: 両方のスクロールバーが表示されます。これは、垂直スクロールバーが存在するとクライアント領域の幅が狭くなり、水平スクロールバーが強制的に表示されるためです。
どうやら.NETは最初に垂直スクロールバーが必要かどうかを評価し、次に水平が表示されるかどうかを評価します。これは、垂直スクロールバーの存在によってクライアントのサイズが縮小されるかどうかに依存します。(つまり、同じ実験では不要な VERTICAL スクロールバーは表示されません... 水平スクロールバーのみが表示されます。)
私は VB2008 Express を使用していますが、これは後のバージョンに引き継がれると思います。
必要な解決策: 次のいずれかが必要です。A) 「垂直自動スクロールのみ」のパネル。B) 水平スクロールバーが実際に必要かどうかをパネルに「再考」させる方法が必要です。(リフレッシュはしていないようです。)