一般的な問題
アプリケーションは C# WinForms .Net 4.0 です。
フォームの大部分を占めるがSplitContainer
あります。すべての方向にアンカーに設定されているため、フォームに合わせてサイズが変更されます。左側のパネル (Panel1) にはシンプルなメニューがあり、ここでは問題ありません。右側のパネル (Panel2) はより複雑で、多数のネストされたタブ コントロール (多くのコントロールを含む) が含まれています。これは非常に複雑ですが、変更されていません。
問題は、フォームのサイズ変更がうまく機能しないことです。実際、エッジをゆっくりとドラッグしてサイズを変更すると問題なく動作しますが、すばやくドラッグするか、「復元」ボタン (フォームの右上) を使用すると問題が発生します。
私のコントロール階層
以下は、私のコントロール階層の簡単な例です。間違いなく削減されたバージョンですが、複製に役立つネストされたタブ コントロールが強調表示されています。
- 形
- 分割コンテナ (アンカー: 上、左、下、右)
- SC Panel1 (最小幅: 300)
- TreeViewControl (名前は忘れてください)
- SC パネル 2
- パネル (アンカー: 上、左、下、右)
- タブ コントロール (アンカー: 上、左、下、右)
- 画面をオーバーフローし、ナビゲーション ボタンを右上隅に表示する必要があるページが多数あるタブ コントロール (アンカー: 上、左、下、右)
- タブ コントロール (アンカー: 上、左、下、右)
- パネル (アンカー: 上、左、下、右)
- SC Panel1 (最小幅: 300)
- 分割コンテナ (アンカー: 上、左、下、右)
デバッグの詳細
いくつかのデバッグの後、実際にはPanel2
(分割コンテナーの子) が適切にサイズ変更されていないように見え、実際のSplitContainer
サイズ自体は正常にサイズ変更されます。
これを示すデバッグ値は次のとおりです...
サイズ変更前の全幅フォーム:
splitContainerMain.Width: 1479
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
すべて予想通り、splitContainerMain.Panel2.Width
より小さいですsplitContainerMain.Width
。
問題が発生する場所のサイズを変更した後:
splitContainerMain.Width: 815
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
ご覧のとおり、splitContainerMain.Width
は希望どおりにサイズ変更されていますが、splitContainerMain.Panel2.Width
とその後の子は変更されていません。
注:フォームのサイズを手動でゆっくりと変更すると、幅が正しく更新されることを覚えておいてください。これは、アンカーを正しく設定していなくても問題ありません。
これまでの取り組み
私がやろうとしたことは、さまざまなフォームのサイズ変更イベントを使用して、幅を手動で設定しようとしましたが、役に立ちませんでした。私が試したいのはPanel2.Width
、何らかのイベント内から値を設定することだと思います。
私が探しているもの
- サイズが変更されたときに強制的
splitContainerMain.Panel2.Width
に正しくsplitContainerMain
サイズ変更する方法はありますか? - あるいは、どうある
Panel2.Width
べきかを計算するにはどうすればよいですか?Form.Resize
また、イベントからその値を設定するにはどうすればよいですか? (それとも別のイベント?)