C#のWinFormsでControlの配置について

C# コンピュータ
C#
WinFormsでコントロールの配置について学んだことをまとめてみます。

配置されるタイミングについて

自分はコンストラクタでControls.Add()で配置しますが、それ以外でも動的に生成配置することも可能です。FormのLoadイベント内で配置する場合、すでにフォームが表示されていますので、生成過程が見えてしまいます。this.SuspendLayout()でレイアウトを一時停止を命令してからControl.Add()を実行し、this.ResumeLayout(false)でレイアウトを再開すると、生成過程が非表示にしてあげると、ユーザーから生成過程を隠蔽することができます。

位置およびサイズについて

配置するコントロールのX,Yプロパティ(またはLocationプロパティ)を設定することで親コントロールのクライアント領域の絶対座標に配置することができます。同様にWidth,Heightプロパティ(またはSizeプロパティ)を設定することでコントロールの幅と高さを指定することができます。
ただし、位置やサイズを指定すると、MarginやPaddingの余白に関する設定を上書きされてしまうようです。
C#のWinFormsでMarginとPaddingを確認する。
PaddingやMarginプロパティはコントロールの余白の設定なのですが、実際設定するとどのような影響あるか確認してみます。 デフォルト設定 namespace ClientCoordinate; public partial class...

Anchorプロパティについて

Anchorプロパティは親コントロールのサイズが変更された場合、コントロールの配置に影響します。例えばAnchor.Leftを設定すると親コントロールの左辺からの相対位置が維持されます。
C#のWinFromsでAnchorプロパティを設定する。
Anchorプロパティを設定してみました。 namespace ClientCoordinate; public partial class Form1 : Form { public Form1() { InitializeCompone...

FlowLayoutPanelについて

通常Panelコントロールに子コントロールを配置する場合はX,Yプロパティで配置する位置を指定しますが、FlowLayoutPanelコントロールは子コントロールを水平または垂直方向に自動的配置します。Marginプロパティでコントロール間の余白を調整します。

Dockプロパティについて

親コントロールから左右上下、および中央に子コントロールが配置されます。例えばDockStyle.Topを設定すると親コントロールの上辺に接した領域が割り当てられます。子コントロール幅は親コントロールの幅と連動します。高さはHeightプロパティで指定することができます。DockSytel.FillはDockStyle.Top,Left,Right,Bottomいがいの領域、中央部の領域が割り当てられます。幅と高さは親コントロールに連動します。
適用するコントロールはPanel系のコントロールかtoolstripあたりが使いやすいです。
【.NET Framework】DockStyleのサンプル
フォームにコントロールを配置するドッキング位置を指定するDockStyleを試してみます。 ソースコード using System; using System.Windows.Forms; // DockStyle class Form1 ...

C#同じフォームにコントロールをDockStyle.Fillで複数配置するとどうなるか
コントロールのプロパティのDockにDockStyle.Fillを設定すると描画領域全体にコントロールを広げて配置されます。親フォームのサイズ変更に追従してコントロールサイズを自動的に変更してくれて便利です。 もし、DockStyle.Fi...

SplitContainerコントロールについて

縦または横に分割するコントロールです。分割した領域のサイズはマウスで動的に変更することできます。
Dockプロパティは領域のサイズが固定する場合は良いですが、動的に変動させたい場合はSplitContainerを使うとよいです。
C#でフォームを分割するSplitContainerでサンプルを作る
SplitContainerを使うとフォーム上にコントロールを2分割配置することが出来ます。 シンプルに左右分割 using System; using System.Windows.Forms; using System.Drawing;...

コメント