【WinForm】中級:イベント処理とデータバインディングのチュートリアル

2024年8月28日

この資料では、Windowsフォームアプリケーション(WinForm)のイベント処理とデータバインディングについて学びます。これらの概念を理解することで、よりインタラクティブでデータドリブンなアプリケーションを構築できるようになります。


1. イベント処理の基礎

イベント処理は、ユーザーが操作した際に発生する「イベント」に対して、適切なアクションを取る仕組みです。WinFormでは、ボタンのクリックやテキストボックスの変更など、多くのイベントが発生します。

イベント処理の基本的な手順

  1. イベントハンドラメソッドを作成します。
  2. イベントにハンドラを登録します。

サンプルコード:ボタンのクリックイベント

以下のコードは、ボタンをクリックしたときにラベルのテキストを変更する簡単な例です。

public partial class Form1 : Form
{
    private Button button1;
    private Label label1;

    public Form1()
    {
        InitializeComponent();

        button1 = new Button();
        button1.Text = "Click Me";
        button1.Location = new Point(50, 50);
        button1.Click += new EventHandler(Button1_Click);

        label1 = new Label();
        label1.Text = "Hello, World!";
        label1.Location = new Point(50, 100);

        this.Controls.Add(button1);
        this.Controls.Add(label1);
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        label1.Text = "Button clicked!";
    }
}

ポイント

  • button1.Click += new EventHandler(Button1_Click); で、ボタンのクリックイベントに対してButton1_Clickメソッドを紐付けています。
  • Button1_Clickメソッドが呼び出されると、label1のテキストが変更されます。

2. データバインディングの基礎

データバインディングは、コントロールとデータソースを連携させる機能です。これにより、データを簡単に表示したり、編集したりすることが可能になります。

単純なデータバインディング

例えば、テキストボックスにオブジェクトのプロパティをバインドすることができます。

サンプルコード:テキストボックスのデータバインディング

以下のコードは、オブジェクトのプロパティをテキストボックスにバインドし、データが変更されるたびにUIが更新される例です。

public class Person
{
    public string Name { get; set; }
}

public partial class Form1 : Form
{
    private Person person;
    private TextBox textBox1;
    private Label label1;

    public Form1()
    {
        InitializeComponent();

        person = new Person() { Name = "John Doe" };

        textBox1 = new TextBox();
        textBox1.Location = new Point(50, 50);
        textBox1.DataBindings.Add("Text", person, "Name");

        label1 = new Label();
        label1.Location = new Point(50, 100);
        label1.DataBindings.Add("Text", person, "Name");

        this.Controls.Add(textBox1);
        this.Controls.Add(label1);
    }
}

ポイント

  • textBox1.DataBindings.Add("Text", person, "Name"); で、personオブジェクトのNameプロパティをテキストボックスとラベルにバインドしています。
  • テキストボックスの内容を変更すると、person.Nameの値も自動的に更新されます。また、ラベルもバインディングされているため、テキストボックスの変更に応じて表示が更新されます。

3. 応用編:イベント処理とデータバインディングの組み合わせ

イベント処理とデータバインディングを組み合わせることで、より複雑なUIの動作を実現できます。たとえば、ボタンをクリックすると、データバインディングされたプロパティの値を変更し、その結果をラベルに反映させるといった操作が可能です。

サンプルコード:ボタンでプロパティを変更しラベルを更新

public partial class Form1 : Form
{
    private Person person;
    private Button button1;
    private Label label1;

    public Form1()
    {
        InitializeComponent();

        person = new Person() { Name = "John Doe" };

        button1 = new Button();
        button1.Text = "Change Name";
        button1.Location = new Point(50, 50);
        button1.Click += Button1_Click;

        label1 = new Label();
        label1.Location = new Point(50, 100);
        label1.DataBindings.Add("Text", person, "Name");

        this.Controls.Add(button1);
        this.Controls.Add(label1);
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        person.Name = "Jane Doe";
    }
}

ポイント

  • ボタンをクリックすると、person.Nameの値が変更されます。
  • person.Nameはラベルにバインディングされているため、変更が即座にラベルに反映されます。

まとめ

この資料では、WinFormのイベント処理とデータバインディングについて学びました。これらの基礎をマスターすることで、より高度なWinFormアプリケーションを開発するための強力なツールを手に入れることができます。