ソフトキーボードコンポーネントをタッチすると、その背面にあるコントロールが選択される場合がある

文書番号 : 39418     文書種別 : 不具合     登録日 : 2016/05/20     最終更新日 : 2016/11/25
文書を印刷する
対象製品
InputMan for Windows Forms 8.0J
状況
修正済み
詳細
ソフトキーボードのタップによってソフトキーボードを非表示にする処理が実装されている場合、押下したキーの背面にあるコントロールのクリックイベントが発生しフォーカスが移動してしまいます。これは、タッチ操作で行った場合にのみ発生します。

たとえば、次のようにDataGridViewのセルの編集モードが終了した時にソフトキーボードを非表示にしている場合、EnterキーまたはTabキーをタップすることで編集を終了したときに、タップしたキーの背面に位置するセルやコントロールが選択されてしまいます。

Dim _softkeyboard As New GrapeCity.Win.Editors.GcSoftKeyboard

Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
  _softkeyboard.Hide()
End Sub
回避方法
この問題はService Pack 2(v8.0.2016.1125)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。

Service Pack 2より前のバージョンでは次の方法で回避可能です。

ソフトキーボードを非表示にする前にApplication.DoEventsメソッドを呼び出すことで現象を回避することができます。
ただし、この回避コードを実装した同一フォーム上にButtonコントロールが配置されている場合は、ソフトキーボードの表示中にButtonをタップしても、ButtonのClickイベントは発生しません。
この現象は、回避コード実装時の制限事項となります。

Dim _cellEndEditMode = False

Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
  If _softkeyboard.IsShowing And Not _cellEndEditMode Then
    _cellEndEditMode = True
    Application.DoEvents()

    _softkeyboard.Hide()
    _cellEndEditMode = False
  End If
End Sub