タイマーのサンプル(フォームデザインを使わずにコードで作成)

2023年2月17日

ボタンを1つだけで練習(フォームへの配置を自作コードで実施)

実行結果

ベースとなるコード

このコードは、Windowsフォームアプリケーションで、タイマーを使用して定期的にイベントを発生させ、ボタンをクリックすることでタイマーを開始するサンプルコードです。

具体的には、Form1クラスを定義し、タイマーとボタンのインスタンスを生成しています。タイマーの間隔は1秒に設定され、Tickイベントでbutton1のテキストに「●」を追加するように設定されています。また、button1のクリックイベントでタイマーを開始するように設定されています。

このコードは、Visual Studioなどの開発環境で実行することで、Windowsフォームアプリケーションとして動作することができます。

using System;
using System.Windows.Forms;

namespace TimerSampleNetFramework
{
    public partial class Form1 : Form
    {
        Timer timer1;
        Button button1;

        public Form1()
        {
            InitializeComponent();

            timer1 = new Timer();
            timer1.Interval = 1000;
            timer1.Tick += new EventHandler(timer1_Tick);

            button1 = new Button();
            button1.Parent = this;
            button1.Click += new EventHandler(button1_Click);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            button1.Text += "●";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }
    }
}

イベント登録コードの更新

更新箇所

timer1.Tick += new EventHandler(timer1_Tick);

は、次のように略することができます

timer1.Tick += timer1_Tick;

まとめたコード

using System;
using System.Windows.Forms;

namespace TimerSampleNetFramework
{
    public partial class Form1 : Form
    {
        Timer timer1;
        Button button1;

        public Form1()
        {
            InitializeComponent();

            timer1 = new Timer();
            timer1.Interval = 1000;
            timer1.Tick += timer1_Tick;

            button1 = new Button();
            button1.Parent = this;
            button1.Click += button1_Click;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            button1.Text += "●";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }
    }
}

コードの整理をしてみる

上記コードで十分ですが、学習のためさらにまとめてみましょう

timer1.Tickのイベント登録方法を更新

ビデオを確認しながら次のように更新してみましょう
イベントが1分で完結する場合は、{}の省略もできます
もちろん、行が増えたときに{}で複数行に戻すこともできます

using System;
using System.Windows.Forms;

namespace TimerSampleNetFramework
{
    public partial class Form1 : Form
    {
        Timer timer1;
        Button button1;

        public Form1()
        {
            InitializeComponent();

            timer1 = new Timer();
            timer1.Interval = 1000;
            timer1.Tick += (sender, e) => button1.Text += "●";

            button1 = new Button();
            button1.Parent = this;
            button1.Click += button1_Click;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            button1.Text += "●";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }
    }
}

button1のクリックイベントも整理してみます

using System;
using System.Windows.Forms;

namespace TimerSampleNetFramework
{
    public partial class Form1 : Form
    {
        Timer timer1;
        Button button1;

        public Form1()
        {
            InitializeComponent();

            timer1 = new Timer();
            timer1.Interval = 1000;
            timer1.Tick += (sender, e) => button1.Text += "●";

            button1 = new Button();
            button1.Parent = this;
            button1.Click += (sender, e) => timer1.Enabled = true;
        }
    }
}

このコードは、Windows フォームアプリケーションを作成し、ボタンをクリックすることで1秒ごとにボタンのテキストに円を追加するタイマーを作成しています。

具体的には、Timer クラスのインスタンスを作成し、そのインターバルを1秒に設定しています。そして、タイマーの Tick イベントに、ラムダ式で定義されたボタンのテキストに円を追加する処理を登録しています。

また、Button クラスのインスタンスを作成し、親としてこのフォームを設定しています。そして、ボタンがクリックされたときに、タイマーを有効にする処理を登録しています。

このコードは、C#言語の .NET Framework を使用していることに注意してください。using ステートメントによって SystemSystem.Windows.Forms の名前空間がインポートされているため、これらのクラスを直接使用することができます。

ラムダ式が採用されたので、今は使う機会が減ってラムダ式に置き換えられるようになりましたが、昔は、匿名(無名)関数の役割としてデリゲート(delegate)が使われていました

サンプル1

timer1.Tick += delegate (object sender, EventArgs e)
{
    button1.Text += "●";
};

サンプル2

timer1.Tick += delegate
{
    button1.Text += "●";
};

どちらの方法でも、ラムダ式と同様に、Tickイベントが発生するたびにbutton1のテキストにを追加することができます。

VisualStudioで変更の経過を確認

参考