EditModeOnイベント内でIMEをオフにすると、セルが未編修状態で押した最初のキーの値がセルに入力されない

文書番号 : 82960     文書種別 : 制限事項     登録日 : 2018/06/22     最終更新日 : 2018/06/22
文書を印刷する
対象製品
SPREAD for Windows Forms 11.0J
詳細
EditModeOnイベント内でIMEをオフにすると、セルが未編修の状態で、IMEをオンにしたまま押した最初のキーの値がセルに入力されません。

■サンプルコード(VB.NET)
Private Sub FpSpread1_EditModeOn(sender As Object, e As EventArgs) Handles FpSpread1.EditModeOn
  ' 1列目のセルを編集時、IMEをオフにする。
  If Me.FpSpread1.ActiveSheet.ActiveColumnIndex = 0 Then
    Me.FpSpread1.EditingControl.ImeMode = System.Windows.Forms.ImeMode.Off
  End If
End Sub

■再現手順
1. 1列目の任意のセルにカーソルを置きます。
2. IMEモードをオンにします。
3. 連続で「A」「B」「C」キーを押します。
期待する結果:セルが編集状態になり、半角で"abc"と入力される。
実際の結果:「A」キーを押した時にセルが編集状態になり、半角で"bc"と入力される。

■備考
Windows 10上でアプリケーションを動作させている場合、別の要因によって文字が正しく入力されない場合がございます。
詳細については、以下のナレッジ文書をご覧ください。
[文書番号:41462 | Windows 10にFall Creators Updateを適用すると文字入力動作が不正になる]
回避方法
回避策としては、以下のいずれかの方法が考えられます。
  1. セル自体のIMEモードをあらかじめ設定する方法
    セルのImeModeプロパティをあらかじめ設定することで、そのセルがアクティブセルになった時に、自動的にIMEが切り替わります。
    ■サンプルコード
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' 1列目のIMEをオフにする。
      Me.FpSpread1.ActiveSheet.Columns(0).ImeMode = ImeMode.Off

      ' ※IMEをオンにする必要がない場合には「無効(Disable)」に設定することをおすすめします。
      'Me.FpSpread1.ActiveSheet.Columns(0).ImeMode = ImeMode.Disable

    End Sub

  2. EnterCellイベント内でIMEを変更する
    セルが選択された時に発生するEnterCellイベント内でIME設定を変更する方法です。
    ■サンプルコード
    Private Sub FpSpread1_EnterCell(sender As Object, e As FarPoint.Win.Spread.EnterCellEventArgs) Handles FpSpread1.EnterCell
      ' 1列目のセルが選択された時、IMEをオフにする。
      If FpSpread1.ActiveSheet.ActiveColumnIndex = 0 Then
        FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex).ImeMode = ImeMode.Off
      End If
    End Sub

    なお、IMEをオンにする必要がない場合には、方法1と同様に「無効(Disable)」に設定することをおすすめします。