【環境】
.NET Framwork: 4.5
Visual Studio: 2019C 16.4.1
前提
今回は、VB 案件で試したので、VB で。
本体プロジェクト(Windows フォームアプリ)とは別に
ユーザコントロール用クラスライブラリプロジェクトを作成。
(以下、コントロールプロジェクト)
手順
コントロールデザイン
コントロールプロジェクトを新規作成。
デフォルトで用意されたファイルに、テキストボックスなどを配置。
データバインディング用クラスを作成
Public Class ProfileEntity
Public Property FirstName() As String = ""
Public Property FamilyName() As String = ""
Public Property Age() As Integer = 0
Public Property Gender() As Integer = 0
End Class
そして、性別ラジオボタンのデータバインディングをどうすればよいか
と考えたら、全然思いつかなかった。
Google 先生にも質問してみたけど
ドンピシャの回答は得られなかった。
今後の課題。
バインディング
- [データソース] ビューで、[新しいデータソースの追加]
- 「データソースの種類の選択」ダイアログ
- [オブジェクト] を選択
- [次へ]
- 「データ オブジェクトの選択」ダイアログ
- ツリーを開いて、対象オブジェクトにチェック
- [完了]
- コントロールデザインへ、DataSource コントロールを配置
- DataSource コントロールの DataSource プロパティから
- [他のデータソース]-[プロジェクト データソース]-[(先程登録したオブジェクト)]
- フォーム上の各コントロールの (DataBindings) の対象プロパティへ、オブジェクトプロパティをバインディング
- ComboBox:SelectedValue プロパティ?
- TextBox:Text プロパティ
- ソースへデータオブジェクトのインスタンスを、DataSource へ設定するメソッドを追加
Public Sub SetDataSource(ByVal profile As ProfileEntity)
Me.DataSource1.DataSource = profile
End Sub
試行錯誤に書いた通り、DataSource プロパティを外から設定することはできない。
フォーム利用
- コントロールプロジェクトをビルド
- 本体プロジェクトを新規作成
- 本体プロジェクト内の [参照] のコンテキストメニューから [参照の追加]
- 「参照マネージャー」ダイアログ
- [参照] から、コントロールプロジェクトの .dll を選択
- コントロール追加 の手順でツールボックスへ自作コントロールを追加
- 自作コントロールを、ツールボックスからフォームへ D&D
参考サイト
MSDN:とあるコンサルタントのつぶやき Part 1. 双方向データバインドの基本的な使い方(2009-02-26)
→とてもわかりやすい解説
@IT:WPF/UWP:ラジオボタンを双方向バインディングするには?[C#/VB](2016-02-03)
→ラジオボタンにおける双方向データバインド
試行錯誤
ユーザコントロールクラスを作成
UserControl クラスを継承するのに、下記のように書いたら
ステートメントの終わりを指定してください。
と怒られた。
Public Class ProfileControl Inherits UserControl
End Class
これが正解。
Public Class ProfileControl
Inherits UserControl
End Class
データバインディング用クラスを作成
メンバ変数
メンバ変数ではダメ。
これでは、データバインディングのときに
選択肢として出てこなかった。
Public Class ProfileEntity
Public FirstName As String = ""
End Class
古い記述
プロパティとして宣言すれば問題なかった。
けど、これは古い書き方らしい。
Public Class ProfileEntity
Private _firstName As String = ""
Public Property FirstName() As String
Get
Return _firstName
End Get
Set(value As String)
_firstName = value
End Set
End Property
End Class
DataSource 設定
コントロールを利用するフォーム側で DataSource を設定しようとしたら
できなかった。
なので、コントロール側に、DataSource を設定するメソッドを追加した。