ラッパー数値コントロールでマイナスキーを押下してもKeyDownイベントが発生しない

文書番号 : 41012     文書種別 : 制限事項     登録日 : 2017/08/25     最終更新日 : 2017/08/25
文書を印刷する
対象製品
InputMan for Windows Forms 10.0J
詳細
ラッパー数値コントロールでは、既定ではマイナスキーが値のプラスとマイナスを切り替えるスイッチとして使用されます。

4.0Jの数値コントロールではこの動作を標準的なキー操作によって実現しておりましたが、ラッパー数値コントロールではコントロールの内部でショートカットコンポーネントを使用して同様の動作を実現しています。InputManの仕様ではショートカットキーを設定したキーではKeyDownイベントが発生しないため、この動作は仕様による動作です。

なお、ラッパー数値コントロールのShortcutsプロパティからこのショートカットキーに関する動作を削除することはできません。
回避方法
下記サンプルコードのようにマイナスキーのショートカット機能を削除することで、本現象を回避することが可能です。

[注意]
削除後にマイナスキーを繰り返し押下した時、値のプラスとマイナスの切り替えは無効になります。

[Visual Basic]
Dim pi As System.Reflection.PropertyInfo = GetType(GrapeCity.Win.Input.Interop.ControlBase).GetProperty("GCSHORTCUT", (System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Static Or Reflection.BindingFlags.Instance))
If (Not pi Is Nothing) Then
  Dim instance As GrapeCity.Win.Editors.GcShortcut = TryCast(pi.GetValue(Me.Number1, Nothing), GrapeCity.Win.Editors.GcShortcut)
  If (Not instance Is Nothing) Then
    instance.GetShortcuts(Me.Number1.InnerEditor).Remove(Keys.OemMinus)
    instance.GetShortcuts(Me.Number1.InnerEditor).Remove(Keys.Subtract)
  End If
End If

[C#]
System.Reflection.PropertyInfo pi = typeof(GrapeCity.Win.Input.Interop.ControlBase).GetProperty("GCSHORTCUT", (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | Reflection.BindingFlags.Instance));
if (((pi != null)))
{
    GrapeCity.Win.Editors.GcShortcut instance = pi.GetValue(this.Number1, null) as GrapeCity.Win.Editors.GcShortcut;
    if (((instance != null)))
    {
        instance.GetShortcuts(this.Number1.InnerEditor).Remove(Keys.OemMinus);
        instance.GetShortcuts(this.Number1.InnerEditor).Remove(Keys.Subtract);
    }
}