【WindowsForms】ボードゲーム用のボードとピース配置サンプル

2023年3月2日

デザイン

プロパティ

Padding設定

Form1

// ControlSampleという名前の名前空間を定義する
namespace ControlSample
{
    // Formクラスを継承してForm1クラスを定義する
    public partial class Form1 : Form
    {
        // Form1クラスのコンストラクタ
        public Form1()
        {
            // コンポーネントの初期化
            InitializeComponent();

            // PictureBoxコントロールを生成し、プロパティを設定する
            PictureBox pictureBox = new PictureBox();
            pictureBox.Dock = DockStyle.Fill;
            pictureBox.Name = "ねこ";
            pictureBox.Image = Properties.Resources.cat_sakura_cut_female;
            pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;

            // マウスオーバー時とマウスが領域を離れた時のイベントハンドラを設定する
            pictureBox.MouseHover += (s, e) => pictureBox.BackColor = Color.Red;
            pictureBox.MouseLeave += (s, e) => pictureBox.BackColor = Color.Transparent;

            // tableLayoutPanel1の2(3)列目、1(2)行目にPictureBoxコントロールを追加する
            tableLayoutPanel1.Controls.Add(pictureBox, 2, 1);
        }
    }
}

実行結果

オブジェクトの取得

Windows FormsのTableLayoutPanelで、指定された行と列の位置に配置されたオブジェクトを取得するには、TableLayoutPanelのGetControlFromPositionメソッドを使用します。このメソッドに、取得したいオブジェクトの行と列の位置を指定することで、その位置に配置されたオブジェクトを取得できます。

以下は、例として行1、列2の位置に配置されたオブジェクトを取得するコードの例です。

Control control = tableLayoutPanel1.GetControlFromPosition(2, 1);

var name = control.Name;// ”ねこ"

この例では、tableLayoutPanel1はTableLayoutPanelのインスタンスであり、そのインスタンスに配置されたコントロールから、行1、列2の位置に配置されたオブジェクトを取得しています。取得したオブジェクトは、Control型の変数controlに格納されます。

オブジェクトの削除

実行中に削除するとちらつきます

Windows FormsのTableLayoutPanelで、指定された行と列の位置に配置されたオブジェクトを削除するには、TableLayoutPanelのGetControlFromPositionメソッドでオブジェクトを取得し、その後、TableLayoutPanelのControlsコレクションからオブジェクトを削除する必要があります。

以下は、例として行1、列2の位置に配置されたオブジェクトを削除するコードの例です。

Control control = tableLayoutPanel1.GetControlFromPosition(1, 2);
if (control != null) {
    tableLayoutPanel1.Controls.Remove(control);
}

この例では、tableLayoutPanel1はTableLayoutPanelのインスタンスであり、そのインスタンスに配置されたコントロールから、行1、列2の位置に配置されたオブジェクトを取得しています。取得したオブジェクトは、Control型の変数controlに格納されます。

次に、controlがnullでないかどうかを確認し、nullでない場合はTableLayoutPanelのControlsコレクションからオブジェクトを削除しています。

なお、TableLayoutPanelのGetControlFromPositionメソッドで取得したコントロールを削除する場合は、そのコントロールがTableLayoutPanelに追加されている必要があります。そうでない場合は、削除できません。

参考

自動作成のコード

namespace ControlSample
{
    partial class Form1
    {
        /// <summary>
        ///  Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        ///  Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        ///  Required method for Designer support - do not modify
        ///  the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            tableLayoutPanel1 = new TableLayoutPanel();
            SuspendLayout();
            // 
            // tableLayoutPanel1
            // 
            tableLayoutPanel1.BackColor = Color.Transparent;
            tableLayoutPanel1.BackgroundImage = Properties.Resources._23561123;
            tableLayoutPanel1.BackgroundImageLayout = ImageLayout.Stretch;
            tableLayoutPanel1.ColumnCount = 9;
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.11111F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.Location = new Point(224, 40);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.Padding = new Padding(42, 45, 38, 45);
            tableLayoutPanel1.RowCount = 9;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 11.1111107F));
            tableLayoutPanel1.Size = new Size(609, 714);
            tableLayoutPanel1.TabIndex = 0;
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 15F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(963, 862);
            Controls.Add(tableLayoutPanel1);
            Name = "Form1";
            Text = "Form1";
            ResumeLayout(false);
        }

        #endregion

        private TableLayoutPanel tableLayoutPanel1;
    }
}

参考

ボードの枠線を引くサンプル