次の図に示すように、使用可能な 3 つの領域のうち 2 つの DataGridViews で 2 つの入れ子になった SplitContainers を使用する Windows フォーム アプリケーションを作成中です。設定とフォームの初期化を配線して、ユーザーが最初の DataGridView だけで構成される単一ペイン ビューを優先してマルチペイン フォーマットを無効にできるようにしました。
ここでの主な問題 ((できれば) 十分に詳しく説明します) は、他のパネルが非表示の場合、DataGridViews が SplitContainer パネルの制約に準拠しないことです。
ここで、赤いアウトラインは、参照で適切に呼び出された親 SplitContainer を示しmasterSplitContainer
ます。bottomSplitContainer
青いアウトラインは、位置を占めているというタイトルの子 SplitContainer を示しますmasterSplitContainer.Panel2
。
DataGridViews は と の両方の領域を占有しmasterSplitContainer.Panel1
ますbottomSplitContainer.Panel1
。これまでのところ、プログラムが 3 つの可能性を考慮できるように初期化コードを設計しました。
- ユーザーは単一ペインのみのビュー/UI レイアウトを望んでいるため
masterSplitContainer.Panel1
、 の領域全体を占有しmasterSplitContainer
ます。 - ユーザーはデュアル ペイン レイアウトを有効にしますが、一番下のコンテナーの Panel 2 を削除します。
- ユーザーは 3 つのパネルすべてを必要としています。
私のテスト ビルドが示すように、SplitContainers のみを使用したように見えたので、2 番目の SplitContainer (子) は意図したポイントを取得し、この配置に完全に満足しており、問題はまったくありませんでした。ただし、単一ペイン ビューを有効にする設定をテストすると、次の結果が得られます。
はmasterSplitContainer.Panel2
次のコードで無効になります。
masterSplitContainer.Panel2Collapsed = true;
masterSplitContainer.Panel2.Hide();
この場合、事前定義された境界を保持するのではなく、DataGridView が masterSplitContainer の完全な操作領域を想定するようにします。これは、パーツを追加したときにパネル スプリッターがあったという理由だけで設定されたものです。
削除のプロセスでは、子 SplitContainer (つまり、bottomSplitContainer.Panel1
) に配置された 2 番目の DataGridView で同じことが発生します。これも、その囲いの領域に従いません。
これまでに少し読んだことがありますが、これはアンカーの問題である可能性がありますが、.NET と Windows フォームの経験が非常に限られているため、これには少し手を握ったり指さしたりする必要があるかもしれません明らかな間違いから。
また、実際のコード参照がさらに必要な場合は、リクエストに応じてフォーム クラスを投稿させていただきます。