SHOEISHA iD

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

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

ComponentZine(InputMan)

ふりがな入力やIMEの切り替えを自動で行うWPFアプリケーションの作成

InputMan for WPF 1.0JのGcImeManagerコンポーネントを使ったWPFアプリケーションの作成

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

GcImeManagerコンポーネントについて

 IME管理コンポーネント「GcImeManager」は、日本語入力システム(IME)による入力プロセス中に、使用可能な読み取り文字列を取得してふりがなを作成する機能や、IMEの状態を設定・取得・保持するといった機能を、GcTextBoxコントロールやTextBoxコントロール(WPF標準コントロール)などのテキスト入力用のコントロールに拡張するコンポーネントです。

 GcImeManagerコンポーネントはページに配置するコンポーネントではないので、この機能を使う場合はツールボックスからページのコンポーネントをドラッグ&ドロップするのではなく、そのままXAMLのコードに記述します。そのため、前述したとおり、あらかじめ参照設定を行ってください(前ページの「コンポーネントのインストール」参照)。

ふりがなの自動取得

 WPFのデータバインディング機能とIME管理コンポーネントを組み合わせることで、コントロールに入力された変換文字列の「読み」にあたる文字列(ふりがな)を、指定したコントロールへ自動的に表示できます。

 入力された読み取り文字列は、以下の3つのモードに変換できます。

  1. 日本語の文字を半角カタカナに変換
  2. 日本語の文字を全角カタカナに変換
  3. 日本語の文字をひらがなに変換

 ふりがなの形態は、Webサイトの登録ページなどを見てもさまざまで、使用するデータベースの設計に依存しているため、GcImeManagerコンポーネントはどのふりがなにも対応しています。

 ふりがなの設定はとても簡単です。ふりがなを出力したいコントロールのTextプロパティに、Bindingオブジェクトを使ってGcImeManagerのReadingStringプロパティの値を取得し、どのコントロールの入力からふりがなを取得するのかを指定しておきます。BindingオブジェクトのPathプロパティにReadingStringプロパティを設定することで、漢字の入力が行われるたびに指定したコントロールにて読み取り文字列が表示されるようになります。

 次のコードは、TextBox1に入力された日本語からふりがなを取得し、TextBox2に出力します。

<TextBlock Text="好きな漢字を入力してください。" />
<TextBox Name="textBox1" />
<TextBlock Text="ひらがな"/>
<TextBox Name="textBox2" >
    <TextBox.Text>
        <Binding Mode="TwoWay" ElementName="textBox1" Path="(im:GcImeManager.ReadingString)" />
    </TextBox.Text>
</TextBox>

 また、読みをどの文字種に変換するかは、日本語を入力する側のTextBoxでReadingStringKanaModeプロパティを使用して指定します。

 前述のコードを、半角カタカナのふりがなに変換するよう修正すると、以下のようになります。

<TextBlock Text="好きな漢字を入力してください。" />
<TextBox Name="textBox1" im:GcImeManager.ReadingStringKanaMode="KatakanaHalf"/>   
<TextBlock Text="ひらがな"/>
<TextBox Name="textBox2" >
    <TextBox.Text>
        <Binding Mode="TwoWay" ElementName="textBox1" Path="(im:GcImeManager.ReadingString)" />
    </TextBox.Text>
</TextBox>
各文字種とReadingStringKanaModeプロパティの値
設定値 変換文字列
KanaMode.KatakanaHalf 半角カタカナ
KanaMode.Katakana 全角カタカナ
KanaMode.Hiragana ひらがな

 ふりがなの出力方法も設定できます。これはReadingStringOutputModeプロパティを使用し、上書きにするのか追記にするのかを次の値で指定します。

ReadingStringOutputModeプロパティの値
プロパティ値 説明
ReadingStringOutputMode.None 読み取り文字列を反映させない
ReadingStringOutputMode.Append 末尾に読み取り文字列を追加
ReadingStringOutputMode.Replace 新たな読み取り文字列で上書き

IMEのオンオフの設定と状態の保持

 「.NET Framework」のInputMethodクラスのPreferredImeStateプロパティを使用して、各入力コントロールにフォーカスが移った時点で、IMEを自動的にオンオフさせることができます。InputMethodクラスそのものは.Net Frameworkのクラスですが、GcImeManagerコンポーネントではこのクラスの機能とやり取りをしてIMEの制御を行います。

 また、GcImeManagerコンポーネントでは、次のようにIME状態を保持させることができます。

  • 日本語IMEバーの状態の変更を監視し、状態が変更された場合に現在のIMEバーの状態をターゲット要素に適用します。
  • 要素がフォーカスを取得したときに、日本語IMEバーの現在の状態をバックアップし、前回フォーカスを取得していた時点でのIME状態を再びその要素に適用します。
  • その要素がフォーカスを失ったときに、上記で保存していたバックアップの内容を復元します。

 わかりやすくいうと、前回IMEで設定した変換入力モードを常に保持させることができる、という機能です。通常、IMEは変換入力モードを一度「全角カナ」や「全角英数」に設定しても、フォーカスが移動するたびに常に「ひらがな」に戻してしまいます。

 これに対して、GcImeManagerコンポーネントでは一度設定した変換入力モードを、フォーカスが行き来しても常に同じ変換入力モードを保持します。変換入力モードを保持するには、AllowSaveImeStatusプロパティを「True」に設定します。

 次のサンプルアプリケーションは、3つのTextBoxコントロールを以下のように設定しています。

  1. IMEの設定はなにも行っていない
  2. AllowSaveImeStatusを「true」に設定しIMEの状態を保持
  3. IMEの状態を「ひらがな」に設定

 この状態で、「2」のTextBoxコントロールだけ変換入力モードを変えても、常にそのモードを保持します。

IMEの状態の保持の動作-1
IMEの状態の保持の動作-1
IMEの状態の保持の動作-2
IMEの状態の保持の動作-2
IMEの状態の保持の動作-3
IMEの状態の保持の動作-3

次のページ
WPFアプリケーションの作成

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

  • このエントリーをはてなブックマークに追加
ComponentZine(InputMan)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6265 2011/11/15 15:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング