FlowLayoutPanelは子コントロールを自動的配置してくれるコントロールです。
配置するコントロールはサイズのみ指定し、配置する座標はFlowLayoutPanelに任せることが出来ます。
例、
namespace FlowLayoutPanelSample;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FlowLayoutPanel panel1 = new()
{
Dock = DockStyle.Fill,
Padding = new Padding(10),
};
Label label1 = new()
{
Text = "ラベル1:",
Size = new Size(50, 30),
AutoSize = false, // 自動サイズ調整OFF
TextAlign = ContentAlignment.MiddleCenter, // 文字を中央に配置
Margin = new Padding(10, 0, 5, 0), // 隣接するコントロールとのマージン
};
TextBox textBox1 = new()
{
Text = "テキストボックス1",
Size = new Size(400, 30),
AutoSize = false, // 自動サイズ調整OFF
Margin = new Padding(5, 4, 10, 0), // 隣接するコントロールとのマージン
};
Button button1 = new()
{
Text = "ボタン1",
AutoSize = true,
};
Label label2 = new()
{
Text = "ラベル2:",
Size = new Size(50, 30),
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Margin = new Padding(10, 0, 5, 0),
};
panel1.Controls.AddRange(new Control[]
{
label1,
textBox1,
button1,
label2,
});
// button1で改行
panel1.SetFlowBreak(button1, true);
Controls.Add(panel1);
}
}
実行
panel1.Controls.AddRange()
で追加した配列順にコントロールが配置されます。
配置されたコントロールがFlowLayoutPanelの幅を超える場合自動的改行されますが、panel1.SetFlowBreak()
で改行を強制することも出来ます。
ウィンドウの幅を縮めるとコントロールが縦に並びました。
レイアウトを自動でしてくれるので、フォームのデザインにこだわる必要が無い場合は、結構便利に使っています。
コメント