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

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

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

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

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

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

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を開きます。
まだバインドさせるデータがなにもないので、「プロジェクトデータソースの追加...」でデータソースを作成します。
f:id:kitunechan:20150416120601p:plain


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


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

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

データソースを作ったので選択できるようになりました。やったぜ
f:id:kitunechan:20150416121557p:plain

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

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


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


そんな時はデータソースウインドウからドラッグドロップで設定できます。
f:id:kitunechan:20150416122902p:plain
あれ、こっちのほうが便利なんじゃ(゚ω゚)

※ 子クラスのプロパティを指定すると特定条件下でエラーになってしまうことがあります
Designer.csでのBindingSourceのISupportInitialize.EndInit()の順番


最後にBindingSourceのDataSourceに、使用するインスタントを割り当てましょう。
f:id:kitunechan:20150416132655p:plain

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


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