ソフトキーボードコンポーネントをタッチすると、その背面にあるコントロールが選択される場合がある
対象製品
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
たとえば、次のように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
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
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