IMEコンポーネントを使用してふりがなの表示モードをIntelligenceに指定したとき、コードから特定の文字列を設定すると、ふりがなが取得されない場合がある
対象製品
InputMan for Windows Forms 7.0J
発生環境
Microsoft Office IME 2007 SP2以降
詳細
IMEコンポーネントを使用して、ふりがなの取得元のコントロールのOutputModeプロパティをIntelligenceに指定したとき、ふりがなの取得元のコントロールのTextプロパティやAppendTextメソッドで特定の文字列を含む文字列をコードから設定すると、以下のような現象が発生する場合があります。
[Microsoft Office IME 2007 SP2]
"ほそだ"、"むたク"、"むたイ"など
[Microsoft Office IME 2010]
"ほそ"など
本現象はIMEコンポーネントが内部で使用しているMicrosoft IME APIの下記の動作に起因しているため、製品の制限事項となります。
GetJMorphResult メソッドを呼び出す際に、空の結果が返される場合がある
- 「値を Null にすることはできません。 パラメーター名: collection」という例外が発生する場合があります。
- TargetControlプロパティに指定したふりがなを表示するコントロールに、ふりがなが表示されません。
[Microsoft Office IME 2007 SP2]
"ほそだ"、"むたク"、"むたイ"など
[Microsoft Office IME 2010]
"ほそ"など
本現象はIMEコンポーネントが内部で使用しているMicrosoft IME APIの下記の動作に起因しているため、製品の制限事項となります。
GetJMorphResult メソッドを呼び出す際に、空の結果が返される場合がある
回避方法
この問題はService Pack 2(v7.0.2013.1127)で、ふりがなとして空の文字列が取得されたときに、例外が発生しないように改善されました。
これにより、Service Packの適用状況により、回避方法が異なります。
【Service Pack 1以前をご利用の場合】
ふりがなの取得元のコントロールにAppendTextメソッドを使用して文字列を設定し、ふりがなを表示するコントロールにコードからふりがなを設定します。
例外が発生する場合は、Try...Catchステートメントを使用して例外をキャッチし、Catchブロックでふりがなを表示するコントロールにふりがなを設定します。
以下のサンプルコードは、Try...Catchステートメントを使用して、"ほそだ"からふりがなを取得する例です。
[Visual Basic]
Try
TextBox1.AppendText("ほそだ")
Catch ex As Exception
TextBox2.AppendText("ホソダ")
End Try
[C#]
try {
textBox1.AppendText("ほそだ");
} catch {
textBox2.AppendText("ホソダ");
}
【Service Pack 2以降をご利用の場合】
IMEコンポーネントのResultStringイベントを使用して、空のふりがなが取得されたときに、ふりがなを表示するコントロールにコードからふりがなを設定します。
以下のサンプルコードは、ResultStringイベントで、"ほそだ"や"むた"が入力された場合にふりがな文字列を設定する例です。
[Visual Basic]
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' ResultStringイベントが発生するように設定します。
GcIme1.SetCausesImeEvent(TextBox1, True)
End Sub
Private Sub GcIme1_ResultString(sender As Object, e As GrapeCity.Win.Editors.ResultStringEventArgs) Handles GcIme1.ResultString
If e.ReadString = String.Empty Then
Select Case TextBox1.Text
Case "ほそだ"
TextBox2.Text = "ホソダ"
Case "むた"
TextBox2.Text = "ムタ"
End Select
End If
End Sub
[C#]
private void Form1_Load(object sender, EventArgs e)
{
// ResultStringイベントが発生するように設定します。
gcIme1.SetCausesImeEvent(TextBox1, true);
}
private void gcIme1_ResultString(object sender, GrapeCity.Win.Editors.ResultStringEventArgs e)
{
if (e.ReadString == string.Empty)
{
switch (textBox1.Text)
{
case "ほそだ":
textBox2.Text = "ホソダ";
break;
case "むた":
textBox2.Text = "ムタ";
break;
default:
break;
}
}
}
これにより、Service Packの適用状況により、回避方法が異なります。
【Service Pack 1以前をご利用の場合】
ふりがなの取得元のコントロールにAppendTextメソッドを使用して文字列を設定し、ふりがなを表示するコントロールにコードからふりがなを設定します。
例外が発生する場合は、Try...Catchステートメントを使用して例外をキャッチし、Catchブロックでふりがなを表示するコントロールにふりがなを設定します。
以下のサンプルコードは、Try...Catchステートメントを使用して、"ほそだ"からふりがなを取得する例です。
[Visual Basic]
Try
TextBox1.AppendText("ほそだ")
Catch ex As Exception
TextBox2.AppendText("ホソダ")
End Try
[C#]
try {
textBox1.AppendText("ほそだ");
} catch {
textBox2.AppendText("ホソダ");
}
【Service Pack 2以降をご利用の場合】
IMEコンポーネントのResultStringイベントを使用して、空のふりがなが取得されたときに、ふりがなを表示するコントロールにコードからふりがなを設定します。
以下のサンプルコードは、ResultStringイベントで、"ほそだ"や"むた"が入力された場合にふりがな文字列を設定する例です。
[Visual Basic]
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' ResultStringイベントが発生するように設定します。
GcIme1.SetCausesImeEvent(TextBox1, True)
End Sub
Private Sub GcIme1_ResultString(sender As Object, e As GrapeCity.Win.Editors.ResultStringEventArgs) Handles GcIme1.ResultString
If e.ReadString = String.Empty Then
Select Case TextBox1.Text
Case "ほそだ"
TextBox2.Text = "ホソダ"
Case "むた"
TextBox2.Text = "ムタ"
End Select
End If
End Sub
[C#]
private void Form1_Load(object sender, EventArgs e)
{
// ResultStringイベントが発生するように設定します。
gcIme1.SetCausesImeEvent(TextBox1, true);
}
private void gcIme1_ResultString(object sender, GrapeCity.Win.Editors.ResultStringEventArgs e)
{
if (e.ReadString == string.Empty)
{
switch (textBox1.Text)
{
case "ほそだ":
textBox2.Text = "ホソダ";
break;
case "むた":
textBox2.Text = "ムタ";
break;
default:
break;
}
}
}