SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(InputMan)

名前や郵便番号の入力値に応じて、ふりがなと住所を自動設定する.NETコンポーネント

InputMan for Windows Forms 5.0JのGcTextBox、GcIme、GcAddressコンポーネントを使った住所データ入力フォームの作成

  • このエントリーをはてなブックマークに追加

 アプリケーションやWebページなどでは、住所や氏名データを入力する際に自動的にふりがなを入力したり、郵便番号から住所を検索して表示したりするものがあります。そこで、GcTextBox、GcIme、GcAddressコンポーネントを使い、住所と氏名を入力する際に、ふりがなの自動入力と郵便番号から住所を検索して入力するフォームを作成してみました。

  • このエントリーをはてなブックマークに追加

はじめに

 アプリケーションやWebページなどでは、住所や氏名データを入力する際に自動的にふりがなを入力したり、郵便番号から住所を検索して表示したりするものがあります。

 このような機能を自分のプログラムに実装したいと思っていましたが、簡単にはできないことが分かり諦めていたところ、InputMan for Windows Forms 5.0Jのコンポーネントの中に、これらの機能を手軽に組み込めるものがあることが分かりました。

 そこで、GcTextBox、GcIme、GcAddressコンポーネントを使い、住所と氏名を入力する際に、ふりがなの自動入力と郵便番号から住所を検索して入力するフォームを作成してみました。

漢字で氏名を入力すると自動的にふりがなが入力される
漢字で氏名を入力すると自動的にふりがなが入力される
複数の郵便番号から住所を一括変換する。住所も自動的にふりがなが入力される
複数の郵便番号から住所を一括変換する。住所も自動的にふりがなが入力される

対象読者

 Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある人。

必要な環境

 Visual Basic 2005またはVisual C# 2005、Visual Studio 2005でプログラムが作れる環境。

 なお、本プログラムはWindows Vista上で動作するVisual Studioを使用して作成し動作確認を行っています。

プログラム実行時の注意事項

 InputMan for Windows Forms 5.0Jを使って作成したアプリケーションを配布する場合、InputMan for Windows Forms 5.0Jのアセンブリファイルを添付する必要があります。これは、Common Language RuntimeのDLLをアプリケーションと一緒に配布するのと同じです。アプリケーションを正常に動作させるためには、次の4つのファイルをインストールする必要があります。

  • GrapeCity.Framework.InputMan.v20.dll…フレームワークアセンブリ
  • GrapeCity.Win.Editors.V50.dll…本体コンポーネント
  • GrapeCity.Framework.InputMan.v20.resources.dll…フレームワークアセンブリのサテライトリソース
  • GrapeCity.Win.Editors.V50.resources.dll…本体コンポーネントのサテライトリソース

 これらのファイルを、プログラムを実行するBinフォルダに格納します。 .NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。

 また、今回は郵便番号から住所を検索する機能を使うため、住所検索コンポーネントの検索機能および辞書は、株式会社システム・ビットの製品「DB Entry」を利用しています。

 この「DB Entry」を利用できるようにするために、『DB Entry .NET』のランタイムファイルと辞書ファイルをインストールする必要があります。また、動作対象のコンピュータごとに、DB Entry環境設定(SystemBit.DBEInit.v10.exe)を使い、ライセンス情報と辞書ファイル設定のレジストリ登録を行う必要があります。

 そこで、バイナリ実行ファイルに同梱されているフォルダ「DBENET20」を、プログラムを実行するBinフォルダに格納します。このフォルダには、次のファイルが格納されています。

1.BINフォルダ-検索エンジン
  • SystemBit.DBETel.v20.dll…電話番号検索エンジン
  • SystemBit.DBEZip.v20.dll…市外市内局番・郵便番号検索エンジン
  • SystemBit.DBEInit.v20.exe…DB Entry .NET 環境設定プログラム
2.DICフォルダ-辞書ファイル
  • 市外市内局番・郵便番号辞書
  • 電話番号辞書

 フォルダをコピーしたら、DB Entry.NET 環境設定プログラム「SystemBit.DBEInit.v20.exe」を起動し、辞書ファイルのパス名を設定してください。

DB Entry .NET 環境設定プログラムの設定画面
DB Entry .NET 環境設定プログラムの設定画面

コンポーネントのインストール

 はじめてInputMan for Windows Forms 5.0Jを使用する方は、プロジェクトにInputMan for Windows Forms 5.0Jをインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。製品ページ左側の[ダウンロード]-[トライアル版]をクリックし、ダウンロード方法([FTP]または[HTTP])を選択すれば入手できます。ファイルはZip形式で圧縮されています。

 有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールの追加

 InputMan for Windows Forms 5.0Jをインストールしたら、ツールボックスに専用のタブを作成し、InputMan for Windows Forms 5.0Jコンポーネントを追加します。今回追加するコンポーネントは、「.NET Frameworkコンポーネント」の「名前空間」が「GrapeCity.Win.Editors」で始まる名前空間のコンポーネント「GcTextBox」「GcIme」「GcAddress」です。

「名前空間」が「GrapeCity.Win.Editorsd」で始まる名前空間のコンポーネント「GcTextBox」「GcIme」「GcAddress」を選択する
「名前空間」が「GrapeCity.Win.Editorsd」で始まる名前空間のコンポーネント「GcTextBox」「GcIme」「GcAddress」を選択する

GUIの作成

 今回は、2つのフォームを利用します。

1

 最初のフォーム[Form1]には、画面にあるコンポーネントと、[GcIme][GcAddress]を配置します。これらのコンポーネントは、ユーザーとの対話機能は持たず、プロセスだけを提供します。

 GcShortcutコンポーネントは、自動的に配置されます。
2

 [GcTextBox]の場合は、タスクトレイを開き、「サイドボタンの編集」メニューを選びます。ダイアログが表示されるので、[追加]ボタンを押してサイドボタンを追加し、[Text]プロパティでボタンの文字を、[ButtonWidth]プロパティでボタンの幅を設定しておきます。

サイドボタンの編集]
サイドボタンの編集]
3

 フォーム[Form2]はラベルとボタンを配置しておきます。

Form1のコンポーネントの配置
Form1のコンポーネントの配置
Form2のコンポーネントの配置
Form2のコンポーネントの配置

ふりがな(半角のカタカナ)自動入力機能の設定

 ふりがな自動入力機能は、GcImeコンポーネントが担当します。このコンポーネントは、InputMan for Windows Forms 5.0Jのコンポーネントはもちろん、標準のコントロールやサードパーティ製のコントロールに対し、自動ふりがな入力機能を提供します。

 例えば、GcTextBoxコンポーネントを配置し、さらにGcImeコンポーネントをフォームに配置すると、GcTextBoxコンポーネントに「ReadingStringOutput」プロパティが追加されます。このプロパティを展開し、「TargetControl」でふりがなを入力したいコントロールを指定すると、指定されたコントロールに半角カタカナのふりがなが自動的に入力されます。

 このプログラムでは、「氏名」を入力するGcTextBoxコンポーネント「GcTextBox2」の「ReadingStringOutput」プロパティに、ふりがなを表示するコンポーネントとして「GcTextBox1」を指定します。

 すると、「GcTextBox2」に漢字で氏名を入力していくと、漢字が確定した時点でふりがなが「GcTextBox1」に入力されていきます。

ReadingStringOutputプロパティでふりがなを入力するコンポーネントを指定する
ReadingStringOutputプロパティでふりがなを入力するコンポーネントを指定する
「GcTextBox2」に漢字で氏名を入力していくと順次ふりがなが「GcTextBox1」に入力されていく
「GcTextBox2」に漢字で氏名を入力していくと順次ふりがなが「GcTextBox1」に入力されていく

 このように、プロパティで入力対象のコンポーネントを指定するだけで、自動的にふりがなを入力してくれます。

 なお、OutputModeプロパティを使用すると、ふりがなの入力方法を設定できます。デフォルトはAppendです。

OutputModeプロパティの設定値
項目 設定内容
Append コントロールの内容の末尾にふりがなを追加します
Replace コントロールの内容を上書きしてふりがなを表示します

GcTextBoxコンポーネントのサイドボタン機能の設定

 GcTextBoxコンポーネントには、入力フィールドにボタンやスピンボタン、ドロップダウンボタンを設定することができます。今回は、「氏名」入力用のGcTextBoxコンポーネントにサイドボタンを1つ設定し、入力内容をクリアする処理を組み込んでみました。

 サイドボタンのイベントハンドラを使うには、フォームエディタ上でサイドボタンをダブルクリックします。Clickイベントハンドラが作成されるので、ここに処理を記述します。

Visual Basic
Imports GrapeCity.Win.Editors
Public Class Form1

Private Sub SideButton1_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles SideButton1.Click
    Me.GcTextBox1.Text = ""
    Me.GcTextBox2.Text = ""
End Sub
C#
private void sideButton1_Click(object sender, EventArgs e)
{
    gcTextBox1.Text = "";
    gcTextBox2.Text = "";
}

郵便番号-住所変換機能の設定

 今度は、郵便番号を入力すると自動的に住所に変換して入力する機能を設定します。これも、プロパティを設定するだけで簡単に実現できます。さらに、プロパティの設定によって、住所にもふりがなを自動的に入力できます。使い方はとっても簡単で、GcAddressコンポーネントをフォームに配置すると、InputMan for Windows Forms 5.0Jの各入力コンポーネントに、「GcAddress1のFindAddressSetting」というプロパティが追加されます。

 このプロパティを展開し、「AddressOutput」プロパティで変換した住所を出力するコンポーネントを指定し、「AddressReadStringOutput」プロパティにそのふりがなを出力するコンポーネントを指定するだけです。

 また、「FindAddressMode」プロパティを使用すると、住所検索を郵便番号、電話番号、全国地方公共団体コード(JIS X 0401)のどれで行うのかを指定できます。

FindAddressModeの設定値
内容
0 ByZipCode 郵便番号をキーとして使用
1 ByPhoneNumber 電話番号をキーとして使用
2 ByCityCode 全国地方公共団体コード(JIS X 0401)をキーとして使用
「GcAddress1のFindAddressSetting」プロパティで出力先を指定する
「GcAddress1のFindAddressSetting」プロパティで出力先を指定する

 なお、「住所」用GcTextBoxコンポーネント(GcTextBox5)には、「クリア」サイドボタンに加え、「転送」サイドボタンを追加しています。

 このボタンでは、名前と住所の入力内容をフォームForm2のラベルで表示する処理を組み込んでいます。

Visual Basic
 Private Sub SideButton2_Click(ByVal sender As System.Object, _
         ByVal e As System.EventArgs) Handles SideButton2.Click
    Form2.Label2.Text = Me.GcTextBox1.Text
    Form2.Label3.Text = Me.GcTextBox2.Text
    Form2.Label5.Text = Me.GcTextBox3.Text
    Form2.Label7.Text = Me.GcTextBox4.Text
    Form2.Label9.Text = Me.GcTextBox5.Text

    Form2.Show()
End Sub

Private Sub SideButton3_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles SideButton3.Click
    Me.GcTextBox3.Text = ""
    Me.GcTextBox4.Text = ""
    Me.GcTextBox5.Text = ""
End Sub
C#
private void sideButton2_Click(object sender, EventArgs e)
{
    Form2 fm2 = new Form2();

    fm2.label2.Text = gcTextBox1.Text;
    fm2.label3.Text = gcTextBox2.Text;
    fm2.label5.Text = gcTextBox3.Text;
    fm2.label7.Text = gcTextBox4.Text;
    fm2.label9.Text = gcTextBox5.Text;

    fm2.Show();
}

private void sideButton3_Click(object sender, EventArgs e)
{
    gcTextBox3.Text = "";
    gcTextBox4.Text = "";
    gcTextBox5.Text = "";

}
フォームForm2の実行画面
フォームForm2の実行画面

郵便番号-住所の連続変換処理の作成

 大量の住所データを処理するなら、コードから変換処理をした方が圧倒的に効率的だろうと思い、今度はコードからGcAddressコンポーネントを作成し、複数の郵便番号を一括して住所に変換し、リストボックスで表示する処理を作成してみました。

GetCustomerInfoFromZipNumberメソッドの実行

 ここでは、サブプロシージャ(独自のメソッド)「search」を作成し、郵便番号の連続変換を行うようにしています。メソッドの引数は1つで、郵便番号を文字列で指定します。

 郵便番号から住所を検索するには、GcAddressクラスのGetCustomerInfoFromZipNumberメソッドを使用します。第1引数に郵便番号を指定すると、検索結果を第2引数に指定した構造体「GcAddress.CustomerInfo」クラスのメンバに格納します。

 メソッドの実行に成功するとTrueを、失敗するとFalseを返してきます。

Visual Basic
Private Sub search(ByVal zipcode As String)
    Dim jusyo As GcAddress.CustomerInfo
    Dim result As Boolean
    Dim GcAddress2 As New GcAddress()
    Dim data As String = ""

    jusyo = New GcAddress.CustomerInfo()
    result = GcAddress2.GetCustomerInfoFromZipNumber(zipcode, jusyo)
C#
private void search(String zipcode){
    GcAddress.CustomerInfo jusyo; 
    Boolean result; 
    GcAddress gcAddress2 = new GcAddress();
    String data  = "";
    
     jusyo = new GcAddress.CustomerInfo();
     result = gcAddress2.GetCustomerInfoFromZipNumber(zipcode, 
                                                      ref jusyo);

取得した住所データを取り出す処理

 住所が検索されると、CustomerInfoクラスのZipCodeフィールドには郵便番号が、Addressフィールド(構造体)には住所データが格納されます。

 Address構造体では、以下のフィールドに別れてデータが格納されるので、これを取り出してリストボックスに組み込みます。

Prefecture 都道府県名
City
Town
Visual Basic
If result = False Then
    data = "住所がみつかりません: 〒" + zipcode
Else
    data = "〒" & jusyo.ZipCode.Substring(0, 3) & "-" & _
    jusyo.ZipCode.Substring(3) & " " & _
    jusyo.Address.Prefecture & _
    jusyo.Address.City & _
    jusyo.Address.Town 
End If

Me.ListBox1.Items.Add(data)
C#
if(result == false){
    data = "住所がみつかりません: 〒" + zipcode;
}else{
    data = "〒" + jusyo.ZipCode.Substring(0, 3) + "-" +
    jusyo.ZipCode.Substring(3) + " " +
    jusyo.Address.Prefecture +
    jusyo.Address.City +
    jusyo.Address.Town; 
}

listBox1.Items.Add(data);

サブプロシージャ(メソッド)searchの実行

 後は、ボタンのClickイベントハンドラでサブプロシージャ(メソッド)searchを実行します。このとき、郵便番号は「xxx-xxxx」と前3桁と後4桁を「-」(半角のハイフン)で区切り、空白が入らないように指定します。郵便番号に空白が入ると、正しい検索が行われませんので注意してください。

 なお、サンプルプログラムでは、動作確認のためにエラー用データも入れて検索を実行しています。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button1.Click

    '郵便番号に空白を入れないこと
    Call search("000-0000")  'エラー用データ
    Call search("617-0814")
    Call search("245-0001")
    Call search("173-0004")
    Call search("657-0053")
    Call search("540-0036")
    Call search("812-0068")
    Call search("722-0221")
End Sub
C#
private void button1_Click(object sender, EventArgs e)
{
            
    //郵便番号に空白を入れないこと
    search("000-0000");  //エラー用データ
    search("617-0814");
    search("245-0001");
    search("173-0004");
    search("657-0053");
    search("540-0036");
    search("812-0068");
    search("722-0221");
}

まとめ

 ふりがなと住所の自動入力機能は、業務用アプリケーションに組み込むととてもユーザーフレンドリーな操作性を提供しますので、ぜひ取り入れたい機能ですが、自作するとなるとかなり大変です。

 GcAddressコンポーネントであれば、住所データベースもセットで簡単に使えます。また、GcImeコンポーネントであれば、標準コントロールも含めてふりがな入力機能を実現できるようになります。大幅に開発工数を削減することもできますので、利用しない手はないでしょう。

 

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2662 2009/03/17 12:08

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング