ユーザーがウィンドウのサイズを変更した場合にListViewコントロールのみがサイズ変更されるように、いくつかの異なるコントロールタイプを含むUIをC#/ WinFormsでどのように設計できますか?
5 に答える
親コンテナ(この場合はフォーム)のサイズ変更に基づいてコントロールのサイズを自動的に変更するには、主に2つの方法があります。
- コントロールのDockプロパティをDockStyle.Fillに設定します。
- Anchorプロパティを「Top、Bottom、Left、Right」に設定します
Dock.FillでDockプロパティを使用します
このメソッドの利点は、コントロール全体を取得し、親コンテナーのクライアント領域全体(この場合はフォームクライアント領域)を常に埋めるように指示することです。これは、フォームにListControlやTreeViewなどを入力するような場合に便利です。ただし、他のコントロールを使用しながら単一のコントロールをスケーリングする場合は、それほど便利ではありません(必要に応じて)。その場合、他のコントロールのDockプロパティをDockStyle.TopまたはDockStyle.Bottomに設定して、メインのサイズ変更コントロールの上または下にフロートさせる必要があります。
これは面倒であり、他のコントロールのレイアウトオプションも制限します。フォームの上部と下部にある2つのパネルコントロールをドッキングすることで、この問題を軽減できます。これらのパネルは固定位置に留まりますが、中央の領域(DockStyle.Fillコントロールを使用)は親フォームに合わせて拡大縮小されます。次に、これらの「ヘッダー」パネルと「フッター」パネルの任意のレイアウト構成に任意のコントロールを配置できます。
ドッキングされたパネルを使用したこの種の複合フォーム構築は、非常に強力です。率直に言って、.NET 1.0 WinFormsでこれを導入したとき、それは.NETでのゲームの変化でした。
「Top、Bottom、Left、Right」でAnchorプロパティを使用します
フォームスケールで単一のコントロールを使用するだけで、他のコントロールは端に「固定」されたままの場合は、Anchorプロパティを使用します。一番上に残したいコントロールについては、Anchorプロパティを「Top、Left」(デフォルト)に設定します。下部に残したいコントロールの場合は、Anchorプロパティを「Bottom、Left」に設定します。フォーム/ダイアログで幅を広げたいコントロール(単一行のテキストボックスコントロールなど)の場合、Anchorプロパティを "Left、Right"に設定します(そして、上として移動するかどうかに応じて、TopまたはBottomを設定します。または、ダイアログの下部が変わります。
また、フォームを使用してコントロールのサイズを全方向に変更する場合は、Anchorプロパティを「Top、Left、Bottom、Right」に設定します。ドミナントリストボックス、ツリーコントロール、複数行のテキストボックスなど、「メインコントロール」タイプのものに非常に役立ちます。
必要なものについては、AutoSizeまたはAutoSizeModeをいじらないでください...これらのプロパティは、コンテナーの動作に基づいてサイズを変更する方法ではなく、コントロールが自身のコンテンツに基づいてサイズを変更する方法を制御します。AutoSize / AutoSizeモードは内向き、アンカー/ドックは外向きと考えてください。両方のサイズ設定方法を同時に使用すると、非常に奇妙な動作が発生します。一般的には役に立ちません。
ListViewをフォームの4つの側面すべてにドッキングし、他のコントロールを2以下にドッキングします。
「アンカー」(「レイアウト」カテゴリ内)と呼ばれるコントロールのプロパティがあります。これを「上、下、左、右」に設定すると、コントロールとその親コンテナの間のマージンが維持され、コンテナのサイズが変更されたときにサイズが変更されます。
ただし、1つの軸に沿ったアンカーの1つだけが有効になっている場合(たとえば、「左」ではなく「右」)、代わりにコントロールが移動し、コントロールとそのコンテナの間のロックされたマージンが保持されます。
要するに:それが「ドック」プロパティではなく「アンカー」であることを除いて、ジェームズが言ったこととまったく同じです。Dockは似ていますが、まったく同じではありません。
フォームに複数のコントロールがある場合はどうなりますか?
例:フォームを使用して、いくつかのテキストボックスまたはコンボボックスなどに入力されたデータに関してグリッドに結果を生成する場合。また、それに応じてサイズ変更/再調整し、(ドックフィルを使用する場合のように)互いにオーバーラップしないようにします。特に、コンテキスト内のグリッドビューまたは同様のコントロールを使用します。
ListViewをSplitContainerの一方のパネルに配置し、残りのコントロールをもう一方のパネルに配置すると、minとmaxsizeを設定することで、2番目のパネルの拡大を制限できます。
ListViewが完全にドッキングされている場合、フォームのサイズが変更されると、すべての増加が発生します。