.NET 8でInputManPlus for WPFを使う方法を解説!

WPF用入力支援コントロールセット「InputManPlus for WPF(インプットマンプラス)」は、バージョン「3.0J」のSP1から「 .NET 8」環境に対応しています。

本記事では、InputManPlus for WPF に含まれているGcMaskコントロールとGcTextBoxコントロールおよびGcJPAddressコンポーネントを .NET 8で使うときの具体的な手順を紹介します。
また、これらを使って入力された郵便番号から住所を取得する方法についても解説します。

JPAddressによる住所の取得

はじめに

本記事では .NET 8に対応しているVisual Studio 2022を使用します。また、InputManPlusの .NET 8対応モジュールはNuGetパッケージで提供しているので、 .NET Framework版のInputManPlusとは少しだけ手順が異なります。

開発環境

InputManPlusのNuGetパッケージをプロジェクトに追加する手順については、InputManJPAddressのヘルプでも解説していますので、こちらもご一読いただければと思います。

新規プロジェクトの作成

最初に、Visual Studio 2022を起動して「新しいプロジェクトの作成」を押下します。

新しいプロジェクトの作成

次に「新しいプロジェクトの作成」画面で「C#」+「Windows」+「デスクトップ」でフィルタし、「WPF アプリケーション」を選択し、[次へ]ボタンを押下して次の画面へ移動します。

プロジェクトテンプレートの選択

「新しいプロジェクトを構成します」画面では「プロジェクト名」を設定します。名称は任意ですが、ここでは「InputManPlus_net8」にします。

「プロジェクト名」を設定したら[次へ]ボタンを押下します。

プロジェクト名の設定

「追加情報」画面では、「フレームワーク」が「 .NET 8.0 (長期的なサポート)」になっているのを確認して[作成]ボタンを押下します。これで、新しいプロジェクトが作成されます。

フレームワークの選択

NuGetパッケージをプロジェクトに追加する

作成したプロジェクトで .NET 8対応版のInputManPlusを使用するには、以下のNuGetパッケージをプロジェクトに追加する必要があります。

まずはInputManのパッケージをインストールします。ソリューションエクスプローラーで「InputManPlus_net8」-「依存関係」を展開して「NuGetパッケージの管理」を押下します。

NuGetパッケージの管理

表示された「NuGetパッケージマネージャー」の「参照」タブで「MESCIUS.WPF.InputMan」をキーワードにして検索すると下のような画面になるので、右側の[インストール]ボタンを押下します。

InputManのNuGetパッケージ

「変更のプレビュー」ダイアログが表示されたら[適用]ボタンを押下します。

変更のプレビュー

続いて「ライセンスへの同意」ダイアログで[同意する]ボタンを押下すると、InputManのNuGetパッケージがプロジェクトに追加されます。

ライセンスへの同意

同様にJPAdressのパッケージもインストールしていきます。「NuGetパッケージマネージャー」の「参照」タブで「MESCIUS.WPF.JPAddress」をキーワードにして検索すると下のような画面になるので、右側の[インストール]ボタンを押下します。

JPaddressのNuGetパッケージ

「変更のプレビュー」ダイアログが表示されたら[適用]ボタンを押下します。

変更のプレビュー

続いて「ライセンスへの同意」ダイアログで[同意する]ボタンを押下すると、JPAdressのNuGetパッケージがプロジェクトに追加されます。

ライセンスへの同意

ウィンドウにコントロールを追加する

ウィンドウのデザイン画面でツールボックスを開くと、「InputMan WPF」および「JPAddress WPF」という項目が追加されているので、それぞれからGcMaskコントロールとGcTextBoxコントロールおよびGcJPAddressコンポーネントをウィンドウ上に配置します。また、コモンWPFコントロールのLabelコントロールとButtonコントロールも追加します。

下の画像は、これらのコントロールとコンポーネントをウィンドウに追加して位置やサイズおよび各種独自機能をデザイン画面で設定した後の状態を示しています。

コントロールの追加

ソリューションエクスプローラーで「依存関係」-「パッケージ」を開いて内容を確認すると、「MESCIUS.WPF.InputMan(3.1.0)」と「MESCIUS.WPF.JPAddress(3.1.0)」の「コンパイル時のアセンブリ」として下のようなコンポーネントが登録されていることが分かります。

追加されたコンポーネント

これらのアセンブリは、次のような「\.nuget\packages」フォルダに収められています。

  • C:\Users\ユーザー名\.nuget\packages\mescius.wpf.inputman\3.1.0\lib\net6.0-windows7.0
  • C:\Users\ユーザー名\.nuget\packages\mescius.wpf.jpaddress\3.1.0\lib\net6.0-windows7.0

郵便番号から住所を取得する

これで準備が完了したので、いよいよアプリケーションの作成です。このサンプルでは、GcMaskコントロールで入力した郵便番号に対応した住所をGcJPAddressコンポーネントの機能を使って取得し、それをGcTextBoxコントロールに表示します。

また、InputManPlusのコントロールとコンポーネントに加えて、コモンWPFコントロールのButtonコントロールとLabelコントロールも使用します。それぞれの役割は、次のとおりです。

項目説明
GcMaskマスク機能を使った郵便番号の入力
GcTextBox取得した住所の表示
GcJPAddress郵便番号から住所を取得
ButtonClickイベントでGcJPAddressの機能を実行
LabelGcMaskとGcTextBoxについて説明する文字列を表示

XAMLの設定

各コントロールとコンポーネントのプロパティは、すべてXAMLで設定します。

「MainWindow.xaml」ファイル全体の記述は次のようになります。

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:InputManPlus_net8"
        xmlns:im="http://schemas.grapecity.com/windows/2010/inputman" 
        xmlns:jpaddress="http://schemas.grapecity.com/windows/2010/jpaddress" 
        x:Class="InputManPlus_net8.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="250" Width="800" 
        WindowStartupLocation="CenterScreen">
    <Grid>
        <Label 
            x:Name="Label1"  
            Content="郵便番号:" 
            FontSize="24" 
            HorizontalAlignment="Left" 
            Margin="32,50,0,0" 
            VerticalAlignment="Top" 
            Width="128"/>
        <im:GcMask 
            x:Name="GcMask1" 
            DefaultActiveFieldIndex="0"
            FieldSet="〒\D{3}-\D{4}" 
            FontSize="24" 
            Height="38" 
            HorizontalAlignment="Left" 
            InputMethod.PreferredImeState="Off" 
            Margin="160,50,0,0" 
            VerticalAlignment="Top" 
            Width="280" 
            WatermarkDisplayNull="<ここに郵便番号を入力>"
            WatermarkDisplayNullForeground="LightGray"/>
        <Label 
            x:Name="Label2"  
            Content="住所:" 
            FontSize="24" 
            HorizontalAlignment="Left" 
            Margin="80,101,0,0" 
            VerticalAlignment="Top" 
            Width="75"/>
        <im:GcTextBox 
            x:Name="GcTextBox1" 
            FontSize="24"  
            Height="38" 
            HorizontalAlignment="Left" 
            Margin="160,100,0,0" 
            VerticalAlignment="Top" 
            WatermarkDisplayNull="<ここに住所を入力>" 
            WatermarkDisplayNullForeground="LightGray"
            Width="570"/>
        <Button 
            x:Name="Button1" 
            Content="住所検索" 
            FontSize="18" 
            Height="38" 
            HorizontalAlignment="Left" 
            Margin="450,50,0,0" 
            VerticalAlignment="Top" 
            Width="100" 
            Click="Button1_Click"/>
        <jpaddress:GcJPAddress
            x:Name="GcJPAddress1" 
            Height="45" 
            HorizontalAlignment="Left" 
            Margin="100,0,0,0" 
            VerticalAlignment="Top" 
            Width="100"/>
    </Grid>
</Window>

GcMaskコントロールで設定しているInputMan独自のプロパティは下記のとおりです。

プロパティ内容
DefaultActiveFieldIndexフォーカス取得時のアクティブフィールド
FieldSetマスク書式
WatermarkDisplayNull未入力時の透かし表示文字列
WatermarkDisplayNullForeground透かし表示文字列の文字色

これらの機能の詳細については、下記のヘルプをご参照いただければと思います。

GcTextBoxコントロールで設定しているInputMan独自のプロパティは次の2つです。

プロパティ内容
WatermarkDisplayNull未入力時の透かし表示文字列
WatermarkDisplayNullForeground透かし表示文字列の文字色

コードの記述

GcMaskコントロールに入力された郵便番号から住所を取得するために、ButtonコントロールのClickイベントを使います。設計時にウィンドウ上でButtonコントロールをダブルクリックすると「MainWindow.xaml.cs」内にButton1_Clickのイベントプロシージャが自動的に生成されるので、その中に下記のコードを記述します。

private void Button1_Click(object sender, RoutedEventArgs e)
{
    var value = GcMask1.Value;
    var split = false;
    var zip = ZipCodeQueryMode.GeneralZipCode;
    var addressInfo = GcJPAddress1.GetAddress(value, split, zip);
    foreach (var val in addressInfo)
    {
        GcTextBox1.Text = val.Prefecture + val.City + val.Town + val.Area;
    }
}

GcJPAddressコンポーネントのGetAddressメソッドを呼び出すことで、GcMaskコントロールに入力されたValue(郵便番号)からAddressInfo(住所情報)を取得し、それをGcTextBoxコントロールに設定しています。

GcJPAddressコンポーネントを使って郵便番号から住所を取得する方法についてヘルプで解説しているので、そちらもご確認いただければと思います。

さらに、辞書を読み込むときに文字エンコーディングを使用できるように「App.xaml.cs」でAppクラスのOnStartupメソッドをオーバーライドします。この操作は、下記のヘルプに記載しているように .NET 8や .NET 6の環境でのみ必要となります。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        base.OnStartup(e);
    }
}

以上で、郵便番号から住所を取得するアプリケーションの完成です。郵便番号を入力し[住所検索]ボタンを押下すると、JPAddressで取得した住所が自動で入力されます。

さいごに

今回ご紹介したように .NET 8でも .NET Frameworkとほとんど同じようにInputManPlus for WPFを使うことができます。この記事が、新しいプラットフォームである .NET 8でInputManPlusをご利用いただくきっかけになれば幸いです。

Webサイトでは製品の機能を手軽に体験できるデモアプリケーションやトライアル版も公開しておりますので、こちらもご確認ください。

また、ご導入前の製品に関するご相談、ご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /