.NET TIPS

機種依存文字のJIS90字体とJIS2004字体を同時に表示するには?[3.0、3.5、C#、VB]

デジタルアドバンテージ 一色 政彦
2008/05/10

 Windows Vistaでは、「JIS2004」(JIS X 0213:2004)という新バージョンのJIS漢字コードに対応した日本語フォントとして、「メイリオ」や、MSゴシック3書体(「MS ゴシック」、「MS P ゴシック」、「MS UI Gothic」)、MS明朝2書体(「MS 明朝」「MS P 明朝」)が導入された。VistaではこのJIS2004対応フォントが標準で使われるが、JIS2004では字体の変更や文字の追加が行われているため、従来のWindows XPやWindows Server 2003などと文字の表示が異なる場合がある(なお、従来バージョンのJIS漢字コードは「JIS90」と呼ばれる)。

 このような文字の表示の違いはアプリケーションに何らかの影響を及ぼす可能性がある(詳しくは「特集:VB6アプリのWindows Vista対応(後編)」の「フォント問題」を参考にしてほしい)。そのため、従来のXPとVistaでどのように文字が変わるのかを検証したいこともあるだろう。しかし、OSをXPとVistaで切り替えながら、文字を見比べるのは大変である。

 実は、Vistaに導入されたJIS2004フォントは、JIS90の字体(いわゆる異体字)も内部に持っている。通常、この字体は表示できないが、.NET Framework 3.0以降で追加された新描画技術のWPF(Windows Presentation Foundation)にはこれを表示する機能(=OpenTypeアウトラインを持つフォントの日本語字体を切り替えるFeature Tagを指定する機能)が搭載されている。そこで本稿では、この機能を活用して、JIS90の字体とJIS2004の字体を同時に表示する方法を紹介する。

 なお以降では、JIS90とJIS2004で字体が異なる文字は「機種依存文字」と呼ぶ。

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

 まずは、機種依存文字を入力/表示するためのWPFアプリケーション(サンプル・アプリケーション)を作成しよう。次の画面のようなサンプル・アプリケーションを開発する。詳しい手順は後述の説明を参考にしてほしい。

サンプル・アプリケーションの開発例

 WPFアプリケーションのプロジェクトを作成するには、メニュー・バーの[ファイル]−[新規作成]−[プロジェクト]を選択して[新しいプロジェクト]ダイアログを表示する。その[新しいプロジェクト]ダイアログで、左側の[プロジェクトの種類]のツリー表示の中から[Visual C#]もしくは[Visual Basic]の配下にある[Windows]を選択し、右側の[テンプレート]の一覧から「WPF アプリケーション」のテンプレートを選択して[OK]ボタンをクリックする。

 今回のサンプル・アプリケーションでは、TextBoxコントロールが見やすくなるように、WPFフォーム(ウィンドウ)の背景色を黄色に設定する。具体的には、WPFフォームを選択した状態で[プロパティ]ウィンドウので[Background]プロパティに「#FFFFFFCC」を設定すればよい。

 次に、テキストを入力/表示するためのTextBoxコントロールを2つ配置する。WPFフォーム・デザイナで1つ目のTextBoxコントロールを選択して[プロパティ]ウィンドウの上部にある[Name]設定欄に「textBoxJis90」を入力する。2つ目も同様の手順で「textBoxJis04」を入力する。

 そして、それぞれのTextBoxコントロールの入力内容が変化したときに、もう一方のTextBoxコントロールにその内容が反映するようにしておく。これには、TextBoxコントロールをダブルクリックするとTextChangedイベント・ハンドラが追加されるので、これを両方のTextBoxコントロールに対して行い、次の太字部分のコードを追加する。

private void textBoxJis90_TextChanged(object sender, TextChangedEventArgs e)
{
  textBoxJis04.ext = textBoxJis90.Text;
}

private void textBoxJis04_TextChanged(object sender, TextChangedEventArgs e)
{
  textBoxJis90.Text = textBoxJis04.Text;
}
Private Sub textBoxJis90_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles TextBox1.TextChanged
  textBoxJis04.ext = textBoxJis90.Text
End Sub

Private Sub textBoxJis04_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles TextBox1.TextChanged
  textBoxJis90.Text = textBoxJis04.Text
End Sub
TextChangedイベント・ハンドラの実装(上:C#、下:VB)

 さらに、起動したときに「葛飾 辻堂 進捗」という機種依存文字を自動的に入力するようにしておこう。

 これには、C#の場合では、コード・エディタを開き、WPFフォームの「Window1」のコンストラクタの内部で、InitializeComponentメソッドの呼び出しの下に(=フォーム上のコントロールの配置が完了した後に)、「textBoxJis90.Text = "葛飾 辻堂 進捗";」を記述する(=1つ目のTextBoxコントロールのTextプロパティに「葛飾 辻堂 進捗」を設定する)。

 一方Visual Basicでは、WPFフォーム・デザイナでWindowフォームをダブルクリックしてLoadedイベント・ハンドラを追加し、(コード・エディタでコードが表示されるので)そのLoadedイベント・ハンドラの内部で1つ目のTextBoxコントロールのTextプロパティに「葛飾 辻堂 進捗」を設定すればよい。

 なお、先ほどの実装により、片方のTextBoxコントロールに設定すればもう1方にも自動的に文字列が設定されるようになっているため、2つ目のコントロールには文字列は設定しなくてよい。具体的には次の太字のコードを追加する。

public Window1()
{
  InitializeComponent();

  textBoxJis90.Text = "葛飾 辻堂 進捗";
}
Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

  TextBox1.Text = "葛飾 辻堂 進捗"
End Sub
機種依存文字の自動入力の実装(上:C#、下:VB)

 最後に、TextBoxコントロールの意味内容を示すためのLabelコントロールを、それぞれのTextBoxコントロールの上に配置しておこう。1つ目のLabelコントロールを選択して[プロパティ]ウィンドウで[Content]プロパティの「Jis90(Windows XP)」を設定し、2つ目には「Jis04(Windows Vista)」を設定すれば、Labelコントロールのテキスト内容を変更できる。

 以上でWPFアプリケーションの基本部分の開発は完了だ。ここまでの作成で先ほど提示した画面のようなWPFフォームが出来上がる。なお、今回のTextBoxコントロールのフォント名は「メイリオ」となっている。

JIS90の字体とJIS2004の字体を同時に表示するには?

 ここからが本TIPSの本題となる。

 今回のサンプル・アプリケーションでは、1つ目のTextBoxコントロールの内容はJIS90の字体で表示し、2つ目はJIS2004の字体で表示するようにしよう。

 これには、XAMLエディタで直接<TextBox>要素内にTypography.EastAsianLanguage属性を書き込む必要がある([プロパティ]ウィンドウではこの属性を設定できない)。属性の値は、JIS90の場合は「Jis90」、JIS2004の場合は「Jis04」である。従って、例えばJIS90を指定したいなら、「Typography.EastAsianLanguage="Jis90"」と記述すればよい(Vistaでは、デフォルトではJIS2004の字体で表示される)。実際に書き込むと次の画面の赤い枠部分のようになる。

JIS90やJIS2004などの字体を指定するTypography.EastAsianLanguage属性の指定

 以上で対応は完了だ。

 次の画面はサンプル・アプリケーションを実行したところだ。なお、見やすくなるように、TextBoxコントロールのフォントを大きくしている。

Windows Vista上で実行したサンプル・アプリケーションの例

 この画面はWindows Vista上で実行している例だが、当然ながらJIS2004フォントはVistaに搭載されているのでVistaで実行する必要がある。赤い下線を引いた部分の文字に注目していただきたい。同じ内容を表示しているはずが、JIS90とJIS2004で異なる字体が表示されているのが分かるだろう。

 ちなみにこれを、Windows XPやWindows Server 2003で実行すると次のような画面になる(実行には.NET Framework 3.0あるいは3.5が必要)。

Windows Server 2003で実行したサンプル・アプリケーションの例

 ご覧のとおり、JIS90とJIS2004を指定しても字体は変更されない。JIS2004フォントがインストールされていないためだ。

 なお、従来のOSでもJIS2004フォントを使うことは可能だ。これを行いたい場合には、「Windows TIPS:従来のOSで新しいJIS2004フォントを利用する」を参照してほしい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
カテゴリ:WPF/XAML 処理対象:TextBoxコントロール
使用キーワード:Typography.EastAsianLanguage属性

この記事と関連性の高い別の.NET TIPS
[ASP.NET]DataGridコントロールの編集用テキストボックスを大きくするには?
[Silverlight 2]テキストボックス(TextBoxコントロール)で複数行を入力するには?
WPF/XAMLでWindowsフォームを利用するには?
[ASP.NET]ビューステートに保存されるものは?
[WPF/UWP]ListView内のTextBoxがクリックされたときに選択項目を切り替えるには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間