住所から郵便番号を検索できるプログラムを作る
[OK]ボタンがタップされた時の処理
WatermarkTextBoxに入力がなかった場合は処理を抜けます。入力があった場合は以下の処理を行います。
変数myUriに
String.Format("http://api.postalcode.jp/v1/zipsearch?word={0}&format=xml", WatermarkTextBox1.Text)
と指定して、wordにWatermarkTextBoxに入力された値を指定します。
Formatにはxmlを指定していますので、返される結果はXMLデータとなります。例えばWatermarkTextBoxに「愛媛県松山市道後」と入力すると図6のようなXMLが返されます。
新しいHttpClientのインスタンスmyHttpClientオブジェクトを作成します。HttpClientクラスは、URIで識別されるリソースにHTTP要求を送信し、そのリソースからHTTP応答を受信するための基本クラスです。
指定URIにGET要求を送信し、非同期操作で応答本体を文字列として返す、GetStringAsyncメソッドにmyUriの値を指定して、返される結果XMLの文字列を変数resultXmlに格納します。
XElement.ParseメソッドでresultXmlを文字列として読み込みます。
AddressInfoクラス型の新しいリストである、myAddressInfoオブジェクトを作成します。
一度myAddressInfoオブジェクトをクリアしておきます。
Descendantsメソッドで全ての子孫要素
のコレクション内を変数resultで反復処理しながら、以下の処理を行います。AddressInfoクラスのzipcodeプロパティに
prefectureプロパティには
表示された郵便番号と住所を選択した時の処理
Frameを表示状態にします。変数myAddressに、ListBoxから選択された項目をAddressInfoクラスに変換して、そのprefecture、city、townプロパティの値を取得して連結し格納します。
このmyAddressを引数にしてWebBrowserPageに遷移します。
Private Sub ResultListBox_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ResultListBox.SelectionChanged Try myFrame.Visibility = Windows.UI.Xaml.Visibility.Visible Dim myAddress As String = DirectCast(ResultListBox.SelectedItem, AddressInfo).prefecture &DirectCast(ResultListBox.SelectedItem, AddressInfo).city &DirectCast(ResultListBox.SelectedItem, AddressInfo).town myFrame.Navigate(GetType(WebBrowserPage), myAddress) Catch myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed Exit Sub End Try End Sub
戻る(←)アイコンがタップされた時の処理
Frameを非表示状態にします。
Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Sub End Class
次に、ソリューションエクスプローラー内のWebBrowserPage.xamlを展開して表示される、WebBrowserPage.xaml.vbをダブルクリックしてリスト3のコードを記述します。
ロジックコードを記述する
リスト3 (WebBrowserPage.xaml.vb)
Option Strict On Public NotInheritable Class WebBrowserPage Inherits Page
ページがアクティブになった時の処理
MainPage.xamlから渡された値は、e.Parameterで受け取れます。これはObject型であるため、CStr関数で
String型にキャストします。変数myUriに
String.Format("http://www.bing.com/search?q={0}", Uri.EscapeDataString(myAddress))
と指定して、引数qにmyAddressの値をエスケープして指定します。
WebBrowserのSourceプロパティにmyUriで初期化されたUriを指定します。これで、WebBrowser内に住所に関連した情報が表示されます。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myAddress As String = CStr(e.Parameter) Dim myUri = String.Format("http://www.bing.com/search?q={0}", Uri.EscapeDataString(myAddress)) WebBrowser1.Source = New Uri(myUri, UriKind.Absolute) End Sub End Class
今回はここまでです。ありがとうございました。
このサンプルを元にしたアプリをWindows ストアで公開しています。
→ 新版:郵便番号検索(Windowsストア)
筆者からのお知らせ
筆者はWindowsストアでアプリを公開しています。チャームの検索からWindowsストアを選択して、検索欄に、kuniyasuまたはYakushijiKuniyasuと入力すると、公開されているアプリの一覧が表示されます。上記はどちらも私のアカウントですので、興味のある方は是非ダウンロードして使ってみてください。
住所から郵便番号を検索するプログラムサンプル