ロジックコードの記述
せっかくフォームデザイナに配置したJPAddressですが、今回のサンプルではデザインとロジックを分離したいので、さくっとフォームデザイナ上からアイコンを削除して、ロジック記述用のJPAddressModel.vbを作成して、そこでコードを使ってJPAddressを使ってみたいと思います。
Visual StudioのソリューションエクスプローラーでModelsフォルダを作成し、Modelsフォルダを右クリックして[追加]‐[クラス]メニューでクラスファイルを追加します。
クラスファイルには次のようなコードを記述します。
Imports GrapeCity.Win.JPAddress Imports System.ComponentModel Public Class JPAddressModel Implements INotifyPropertyChanged Private _Address As List(Of AddressInfo) Public Property Address As List(Of AddressInfo) Get Return Me._Address End Get Set(value As List(Of AddressInfo)) Me._Address = value Call NotifyPropertyChanged("Address") End Set End Property Public Sub GetAddress(postCode As String) Me.Address = (New GcJPAddress).GetAddress(postCode, True).ToList End Sub Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _ Implements INotifyPropertyChanged.PropertyChanged Private Sub NotifyPropertyChanged(ByVal propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub End Class
JPAddressの使い方は非常に簡単で、実際に郵便番号から住所を検索しているのは、GetAddressメソッドの中の次の1行です。
Me.Address = (New GcJPAddress).GetAddress(postCode, True).ToList
これでAddressプロパティに住所が設定されることになります。郵便番号から住所を検索したとき、複数の結果が返ってくる場合があります。そのためJPAddressでの検索結果もIEnumerable型になっています。ここでは画面との連結を考えてToListを使ってListに変換しています。
それでは次に、Addressプロパティを画面に連結するためのクラスをつくりましょう。
画面連結用クラスの作成
ソリューションエクスプローラーでViewModelsフォルダを作成し、フォルダ上で右クリックをして[追加]‐[クラス]メニューを選択して、MainViewModelクラスファイルを作成します。JPAddressModelのPublicなプロパティ、メソッド、イベントをそのままPublicで公開すればいいのでコードは次のようになります。
Imports System.ComponentModel Imports GrapeCity.Win.JPAddress Public Class MainViewModel Implements INotifyPropertyChanged Private WithEvents VmModel As New JPAddressModel Public ReadOnly Property Address As List(Of AddressInfo) Get Return Me.VmModel.Address End Get End Property Public Sub GetAddress(postCode) Call Me.VmModel.GetAddress(postCode) End Sub Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _ Implements INotifyPropertyChanged.PropertyChanged Private Sub VmModel_PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _ Handles VmModel.PropertyChanged RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(e.PropertyName)) End Sub End Class
画面の作成
今回のサンプルでは、郵便番号欄、検索ボタン、検索結果一覧という画面構成にします。
一覧部分はDataGridViewを採用し、Columnsに表示したい要素を事前に設定しておきます。