SHOEISHA iD

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

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

ComponentZine(InputMan)

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

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

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

ふりがなの自動入力を行うGcImeManagerコンポーネントの設定

 今度は、グリッドの下の行にTextBoxコントロールを配置し、ふりがなの自動入力を行うGcImeManagerコンポーネントを設定します。ふりがな入力は、「ひらがな」と「半角カナ」の2種類を作成します。それぞれ、別々のTextBoxコントロールに設定します。

 Borderコントロールを1つと、TextBox・TextBlockコントロールを4つ配置します。

<!-- ふりがなの自動入力の設定 -->
<Border BorderBrush="SlateBlue" BorderThickness="2" Grid.Row="1" Height="178" HorizontalAlignment="Left" 
        Margin="20,20,0,0" Name="border1" VerticalAlignment="Top" Width="462" Background="Aqua" />

<TextBlock Grid.Row="1" Height="36" HorizontalAlignment="Left" Margin="30,37,0,0" Name="textBlock4" Text="好きな漢字を入力してください。" 
           VerticalAlignment="Top" Width="101" TextWrapping="Wrap" />
<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="144,37,0,0" Name="textBox4" VerticalAlignment="Top" Width="324" />

<TextBlock Grid.Row="1" Height="25" HorizontalAlignment="Left" Margin="81,79,0,0" Name="textBlock5" Text="ひらがな"
           VerticalAlignment="Top" Width="50" />
<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="143,76,0,0" Name="textBox5" VerticalAlignment="Top" Width="325">
</TextBox>

<TextBlock Grid.Row="1" Height="36" HorizontalAlignment="Left" Margin="30,115,0,0" Name="textBlock6" Text="好きな漢字を入力してください。" 
           VerticalAlignment="Top" Width="101" TextWrapping="Wrap" />
<TextBox Grid.Row="1" Height="21" HorizontalAlignment="Left" Margin="142,115,0,0" Name="textBox6" VerticalAlignment="Top" Width="326" />

<TextBlock Grid.Row="1" Height="21" HorizontalAlignment="Left" Margin="81,157,0,0" Name="textBlock7" Text="カタカナ" VerticalAlignment="Top" Width="31" />
<TextBox Grid.Row="1" Height="27" HorizontalAlignment="Left" Margin="145,154,0,0" Name="textBox7" VerticalAlignment="Top" Width="321">
</TextBox>

 最初のTextBoxコントロール「textBox4」で、ふりがなの文字種を「ひらがな」に、ふりがなの入力モードを「追記」に設定し、IMEをオンにします。

 ふりがなの文字種は、GcImeManagerクラスの「ReadingStringKanaMode」プロパティを使用し、設定値を「Hiragana」にします。入力モードは、GcImeManagerクラスの「ReadingStringOutputMode」プロパティを使用し、設定値を「Append」にします。IMEのオンは、InputMethodクラスの「PreferredImeState」プロパティを「On」にします。

<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="144,37,0,0" Name="textBox4" VerticalAlignment="Top" Width="324"
         im:GcImeManager.ReadingStringKanaMode="Hiragana"  im:GcImeManager.ReadingStringOutputMode="Append" InputMethod.PreferredImeState="On" />

 ふりがなを受け取るTextBoxコントロール「textBox5」では、Textプロパティに「Binding」オブジェクトを設定し、ふりがなの送り先を「ElementName」プロパティと「Path」プロパティで設定します。

<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="143,76,0,0" Name="textBox5" VerticalAlignment="Top" Width="325">
    <TextBox.Text>
        <Binding Mode="TwoWay" ElementName="textBox4" Path="(im:GcImeManager.ReadingString)" />
    </TextBox.Text>
</TextBox>

 これで、TextBoxコントロール「textBox4」に入力された文字列のふりがなが、TextBoxコントロール「textBox5」に「ひらがな」で入力されます。「追記」モードでは、一度ふりがなを入力したのちに続けて入力すると、作成されたふりがなのあとに続けてふりがなが入力されます。

「textBox4」に入力された文字列のふりがなが「textBox5」に「ひらがな」で入力される
「textBox4」に入力された文字列のふりがなが「textBox5」に「ひらがな」で入力される

 残りの2つのTextBoxコントロールも、同じように作成します。ただし、今度はふりがなを半角カナにするので、入力側のTextBoxコントロールのReadingStringKanaModeプロパティを「KatakanaHalf」に設定します。また、ふりがなの入力モードを「上書き」モードにしますので、ReadingStringOutputModeプロパティを「Replace」にします。

 「上書き」モードでは、一度ふりがなを入力したのちに続けて入力すると、作成されたふりがなが入れ変わります。

<TextBlock Grid.Row="1" Height="36" HorizontalAlignment="Left" Margin="30,115,0,0" Name="textBlock6" Text="好きな漢字を入力してください。" 
           VerticalAlignment="Top" Width="101" TextWrapping="Wrap" />
<TextBox Grid.Row="1" Height="21" HorizontalAlignment="Left" Margin="142,115,0,0" Name="textBox6" VerticalAlignment="Top" Width="326"
         im:GcImeManager.ReadingStringKanaMode="KatakanaHalf"  im:GcImeManager.ReadingStringOutputMode="Replace"  InputMethod.PreferredImeState="On" />

<TextBlock Grid.Row="1" Height="21" HorizontalAlignment="Left" Margin="81,157,0,0" Name="textBlock7" Text="カタカナ" VerticalAlignment="Top" Width="31" />
<TextBox Grid.Row="1" Height="27" HorizontalAlignment="Left" Margin="145,154,0,0" Name="textBox7" VerticalAlignment="Top" Width="321">
    <TextBox.Text>
        <Binding Mode="TwoWay" ElementName="textBox6" Path="(im:GcImeManager.ReadingString)" />
    </TextBox.Text>
</TextBox>
半角カナのふりがなを作成する
半角カナのふりがなを作成する
XAMLコード全文
<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:im="http://schemas.grapecity.com/windows/2010/inputman"
    Title="MainWindow" Height="396" Width="548">

    <Window.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FF6400B0" Offset="0" />
            <GradientStop Color="White" Offset="1" />
            <GradientStop Color="#FF7A7FD7" Offset="1" />
        </LinearGradientBrush>
    </Window.Background>
    
    <Grid Height="351" Width="501">
        <Grid.RowDefinitions>
            <RowDefinition Height="138*" />
            <RowDefinition Height="239*" />
        </Grid.RowDefinitions>

        <!-- IMEの状態を保持する設定 -->
        <Border BorderBrush="Olive" BorderThickness="2" Height="92" HorizontalAlignment="Left" Margin="20,22,0,0" 
                Name="border2" VerticalAlignment="Top" Width="460" Background="GreenYellow" />

        <TextBlock Name="textBlock1" Text="性" Margin="69,38,0,45" HorizontalAlignment="Left" Width="35" />
        <TextBox Height="25" HorizontalAlignment="Left" Margin="94,35,0,0" Name="textBox1" VerticalAlignment="Top" Width="87" 
                 InputMethod.PreferredImeState="On" InputMethod.PreferredImeConversionMode="Native, FullShape" im:GcImeManager.AllowSaveImeStatus="True" />

        <TextBlock Height="22" HorizontalAlignment="Right" Margin="0,38,279,0" Name="textBlock2" Text="名" VerticalAlignment="Top" Width="28" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="223,37,0,0" Name="textBox2" VerticalAlignment="Top" Width="91"
                 InputMethod.PreferredImeState="On" InputMethod.PreferredImeConversionMode="FullShape, Native" im:GcImeManager.AllowSaveImeStatus="True" />

        <TextBlock Height="18" HorizontalAlignment="Left" Margin="30,73,0,0" Name="textBlock3" Text="ローマ字" VerticalAlignment="Top" Width="62" />
        <TextBox Height="26" HorizontalAlignment="Left" Margin="94,71,0,0" Name="textBox3" VerticalAlignment="Top" Width="252" 
                 InputMethod.PreferredImeState="Off"/>

        <!-- ふりがなの自動入力の設定 -->
        <Border BorderBrush="SlateBlue" BorderThickness="2" Grid.Row="1" Height="178" HorizontalAlignment="Left" 
                Margin="20,20,0,0" Name="border1" VerticalAlignment="Top" Width="462" Background="Aqua" />

        <TextBlock Grid.Row="1" Height="36" HorizontalAlignment="Left" Margin="30,37,0,0" Name="textBlock4" Text="好きな漢字を入力してください。" 
                   VerticalAlignment="Top" Width="101" TextWrapping="Wrap" />
        <TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="144,37,0,0" Name="textBox4" VerticalAlignment="Top" Width="324"
                 im:GcImeManager.ReadingStringKanaMode="Hiragana"  im:GcImeManager.ReadingStringOutputMode="Append" InputMethod.PreferredImeState="On" />

        <TextBlock Grid.Row="1" Height="25" HorizontalAlignment="Left" Margin="81,79,0,0" Name="textBlock5" Text="ひらがな"
                   VerticalAlignment="Top" Width="50" />
        <TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="143,76,0,0" Name="textBox5" VerticalAlignment="Top" Width="325">
            <TextBox.Text>
                <Binding Mode="TwoWay" ElementName="textBox4" Path="(im:GcImeManager.ReadingString)" />
            </TextBox.Text>
        </TextBox>

        <TextBlock Grid.Row="1" Height="36" HorizontalAlignment="Left" Margin="30,115,0,0" Name="textBlock6" Text="好きな漢字を入力してください。" 
                   VerticalAlignment="Top" Width="101" TextWrapping="Wrap" />
        <TextBox Grid.Row="1" Height="21" HorizontalAlignment="Left" Margin="142,115,0,0" Name="textBox6" VerticalAlignment="Top" Width="326"
                 im:GcImeManager.ReadingStringKanaMode="KatakanaHalf"  im:GcImeManager.ReadingStringOutputMode="Replace"  InputMethod.PreferredImeState="On" />

        <TextBlock Grid.Row="1" Height="21" HorizontalAlignment="Left" Margin="81,157,0,0" Name="textBlock7" Text="カタカナ" VerticalAlignment="Top" Width="31" />
        <TextBox Grid.Row="1" Height="27" HorizontalAlignment="Left" Margin="145,154,0,0" Name="textBox7" VerticalAlignment="Top" Width="321">
            <TextBox.Text>
                <Binding Mode="TwoWay" ElementName="textBox6" Path="(im:GcImeManager.ReadingString)" />
            </TextBox.Text>
        </TextBox>
    </Grid>
</Window>

まとめ

 アンケート入力の画面などは、氏名や住所の入力時にふりがなも入力しなければならないので、ユーザーにとっては煩雑な操作の1つでもあります。

 GcImeManagerコンポーネントは、ユーザーの入力操作を軽減し誤入力の防止にも役立つので、日本語のアプリを作る際にはとても効果的なコンポーネントと言えるでしょう。

参考文献

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング