[Windows Form] データバインドのやり方

テキストボックスの内容をいちいち変数に入れる処理を書くのはめんどくさいですね。
データバインドを使いましょう。

Visual Studioのデザイナーで設定すると簡単にできます。
スクリーンショットではアドイン画面がいくつか含まれています

適当にフォームを作りました。
テキストボックスが3つあるだけです。

データバインドするにはクラスを作成して、クラス内のプロパティを作る必要があります。
こちらも適当にForm1内に書いちゃいました。
実際には別ファイルにしたほうがいいと思います。

こんな感じのクラスを作りました。

public class バインドするクラス {
	public バインドするクラス() {
		this.子クラスのデータ = new 子クラス();
	}

	public string データ1 { get; set; }
	public int データ2 { get; set; }

	public 子クラス 子クラスのデータ { get; set; }

	public class 子クラス {
		public string 子データ1 { get; set; }
		public string 子データ2 { get; set; }
	}
}

ここで一度ビルドしてください。
作成したクラスをVisual Studioに覚えさせる必要があります。

バインドさせたいテキストボックスを選択して、プロパティから(DataBindings)内のTextを開きます。
まだバインドさせるデータがなにもないので、「プロジェクトデータソースの追加...」でデータソースを作成します。


はい、意味の分からない画面がでました。
オブジェクトを選択して次へ~


先ほど作成したクラスにチェックを入れます。
子クラスの方にはチェックをいれないで下さい。「バインドするクラス」だけです。

完了ボタンを押すとデータソースが作成されます。
データソースウインドウから確認できます。
(ここのウインドウでも作れます。結構どこからでも作れる気がする)

データソースを作ったので選択できるようになりました。やったぜ

選択すると勝手にBindingSourceが作成されて、BindingSourceとTextBoxのTextがバインドされた状態になります。

次のTextBoxもバインドしちゃいましょう。
BindingSourceもつくられちゃったので一覧がもっと便利に!


さて、「子クラス」の「子データ1」をバインドしたいんだが、選択できないんだが!!!!


そんな時はデータソースウインドウからドラッグドロップで設定できます。

あれ、こっちのほうが便利なんじゃ(゚ω゚)

※ 子クラスのプロパティを指定すると特定条件下でエラーになってしまうことがあります
https://social.msdn.microsoft.com/Forums/ja-JP/bb57b795-e376-4e6b-bd0f-6c4cb79370ae/designercsbindingsourceisupportinitializeendinit?forum=csharpexpressja


最後にBindingSourceのDataSourceに、使用するインスタントを割り当てましょう。

this.バインドするクラスBindingSource.DataSource = new バインドするクラス();


そんなわけで、Visual Studioでのデータバインドのやり方でした。