C#のWinFormsでFlowLayoutPanelを試す

C# コンピュータ
C#

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()で改行を強制することも出来ます。

ウィンドウの幅を縮めるとコントロールが縦に並びました。

レイアウトを自動でしてくれるので、フォームのデザインにこだわる必要が無い場合は、結構便利に使っています。

コメント