Winフォームアプリで実行中にコントロールを移動させる

2023年2月16日

フォームアプリで、ゲームのようにキャラクタを移動させたい時があります
その方法についてみていきましょう

PictureBoxを移動させてみる

こんな感じで移動させてみましょう

考え方

一定時間ごとに、Locationの値を更新する

一定時間ごとにイベントを発生させる(メソッドを実行する)

Timerコンポーネントをフォームにドラッグ&ドロップして、プロパティで設定でも同じことができますが、今回は自作してみます

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ControlMove
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Timer timer = new Timer();
            // 1000ms(1秒)毎にタイマーイベントを発生させる設定とします
            timer.Interval = 1000;
        }
    }
}

イベントが発生したら、実行されるイベントハンドラ(メソッド)を作ります

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ControlMove
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Timer timer = new Timer();
            // 1000ms(1秒)毎にタイマーイベントを発生させる設定とします
            timer.Interval = 1000;

            // イベントを登録します
            // 次のコードを先に入力すると、PictureMoveのところが赤いアンダーラインでエラーになりますので、インテリセンスでメソッドを作成させます
            timer.Tick += PictureMove;
        }

        private void PictureMove(object sender, EventArgs e)
        {
        }
    }
}

Locationの値を更新する

イラストが移動するコードを作ります

int x = pictureBox1.Location.X;
x = x + 2;

pictureBox1.Location = new Point(x, pictureBox1.Location.Y);

今回は、Leftプロパティを使い、上記コードを簡略化します

pictureBox1.Left += 2;

完成コード

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ControlMove
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Timer timer = new Timer();
            // 1000ms(1秒)毎にタイマーイベントを発生させる設定とします
            timer.Interval = 1000;

            // イベントを登録します
            timer.Tick += PictureMove;

            // タイマーを起動します
            timer.Enabled = true;
        }

        private void PictureMove(object sender, EventArgs e)
        {
            pictureBox1.Left += 2;
        }
    }
}