いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

FlowLayoutPanel


FlowLayoutPanelは、javaのFlowLayoutマネージャと同じく、決まった方向にコントロールを単純に
配置していくレイアウトです。
同じ行もしくは列に収まらない場合、改行して次の行・列に配置するかそのまま配置し続けるかを選べます。


ソース側で動的にコントロールを配置した利する際に、このレイアウトとTableLayoutPanelを良く使います。


主なプロパティは以下です。

  • WrapContents --> 折り返すかどうかの設定
  • FlowDirection --> コントロールを配置していく方向を設定


以下、サンプル.

        /// 
        /// コンポーネント情報を構築します。
        /// 
        protected void InitializeComponents(){

            Text = GetType().Name;

            SuspendLayout();

            //
            // FlowLayoutPanelの作成.
            //
            FlowLayoutPanel panel = new FlowLayoutPanel();
            
            panel.Dock          = DockStyle.Fill;
            // 配置方向は上から下
            panel.FlowDirection = FlowDirection.TopDown;
            // 折り返す
            panel.WrapContents  = true;

            Controls.Add(panel);

            //
            // ラベルとテキストボックスを縦に
            // いくつか配置する
            //
            for(int i = 0; i < 10; i++){
                Label l = new Label();
                l.Text = string.Format("label-{0}", i);

                TextBox t = new TextBox();
                t.Text = string.Format("text-{0}", i);

                panel.Controls.Add(l);
                panel.Controls.Add(t);
            }

            ResumeLayout();
        }

上記の場合、デフォルトのサイズのままフォームを表示しているので
入りきらずに次の列にコントロールが配置されていきます。


フォームのサイズを変え、入りきるサイズになると全てのコントロールが
縦に並びます。