数値コントロールでマイナスキーが押されたかどうかを取得するには?

文書番号 : 40900     文書種別 : 使用方法     登録日 : 2017/08/25     最終更新日 : 2017/08/25
文書を印刷する
対象製品
InputMan for Windows Forms 10.0J
詳細
InputMan for Windows Forms 10.0Jの数値コントロール、タイムスパンコントロールでは、マイナスキーに対してショートカット機能が設定されています。これはマイナスキー押下時の動作を以下の二つの動作から選択することを可能としたためです。

・マイナスキーがスイッチ機能となる(デフォルト)
例)[-123]が入力されている状態で[-]を押下すると、値は[123]となる

・マイナスはマイナス、プラスはプラスに変更する
例)[-123]が入力されている状態で[-]を押下すると、値は[-123]のまま
  プラスに変更する場合には、[+]を押下する

スイッチ機能の動作はショートカット機能で実現されているため、デフォルトで下記が設定されています。
  • [Subtract]キーに動作「SwitchSign」
  • [OemMinus]キーに動作「SwitchSign」

  • ショートカットの設定があるキーでは、ショートカット機能が優先されてKeyDownイベントが無効になることから、マイナスキー(SubtractとOemMinus)押下時にはKeyDownイベントが発生しません。マイナスキーの押下を取得するためには、数値コントロールでのマイナスキーの動作によって、以下のいずれかの対応を行います。

    ■マイナスキーをスイッチ機能(デフォルト)のままとする場合
    独自のショートカット機能を作成し、追加します。

    [Visual Basic]
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' 既定のショートカット機能を一度削除します。
        Me.GcShortcut1.GetShortcuts(Me.GcNumber1).Remove(Keys.OemMinus)
        Me.GcShortcut1.GetShortcuts(Me.GcNumber1).Remove(Keys.Subtract)
    
        ' マイナスキー押下時の動作を追加したショートカット機能を設定します。
        Me.GcShortcut1.GetShortcuts(Me.GcNumber1).Add(Keys.OemMinus, New MethodInvoker(AddressOf Me.ShortcutAction))
        Me.GcShortcut1.GetShortcuts(Me.GcNumber1).Add(Keys.Subtract, New MethodInvoker(AddressOf Me.ShortcutAction))
    End Sub
    
    Public Sub ShortcutAction()
        Dim gcNumber As GrapeCity.Win.Editors.GcNumber = TryCast(Me.ActiveControl, GrapeCity.Win.Editors.GcNumber)
        If gcNumber IsNot Nothing Then
            gcNumber.SwitchSign()
    
            ' 
            ' ここにマイナスキー押下時の処理を記述します。 
            ' 
            System.Diagnostics.Debug.WriteLine("マイナスキー")
        End If
    End Sub

    [C#]
    public Form1()
    {
        InitializeComponent();
    
        // 既定のショートカット機能を一度削除します。
        this.gcShortcut1.GetShortcuts(this.gcNumber1).Remove(Keys.OemMinus);
        this.gcShortcut1.GetShortcuts(this.gcNumber1).Remove(Keys.Subtract);
    
        // マイナスキー押下時の動作を追加したショートカット機能を設定します。
        this.gcShortcut1.GetShortcuts(this.gcNumber1).Add(Keys.OemMinus, new MethodInvoker(this.ShortcutAction));
        this.gcShortcut1.GetShortcuts(this.gcNumber1).Add(Keys.Subtract, new MethodInvoker(this.ShortcutAction));
    }
    
    public void ShortcutAction()
    {
        GrapeCity.Win.Editors.GcNumber gcNumber = this.ActiveControl as GrapeCity.Win.Editors.GcNumber;
        if (gcNumber != null)
        {
            gcNumber.SwitchSign();
    
            //
            // ここにマイナスキー押下時の処理を記述します。
            //
            System.Diagnostics.Debug.WriteLine("マイナスキー");
        }
    }

    ■マイナスはマイナス、プラスはプラスに変更する動作とする場合
    ショートカット機能を削除することで、KeyDownイベントが発生するようになります。デザイン画面でマイナスキーに対するショートカット機能を削除するか、下記のコードを記述してショートカットの機能を削除します。

    [Visual Basic]
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' 既定のマイナスキーに対するショートカット機能を削除します。
        Me.GcShortcut1.GetShortcuts(Me.GcNumber1).Remove(Keys.OemMinus)
        Me.GcShortcut1.GetShortcuts(Me.GcNumber1).Remove(Keys.Subtract)
    End Sub
    
    Private Sub GcNumber1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcNumber1.KeyDown
        ' マイナスキー押下時の場合
        If e.KeyCode = Keys.OemMinus Or e.KeyCode = Keys.Subtract Then
            ' 
            ' ここにマイナスキー押下時の処理を記述します。 
            ' 
            System.Diagnostics.Debug.WriteLine("マイナスキー")
        End If
    End Sub

    [C#]
    public Form1()
    {
        InitializeComponent();
    
        // 既定のマイナスキーに対するショートカット機能を削除します。
        this.gcShortcut1.GetShortcuts(this.gcNumber1).Remove(Keys.OemMinus);
        this.gcShortcut1.GetShortcuts(this.gcNumber1).Remove(Keys.Subtract);
    }
    
    private void gcNumber1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Subtract)
        {
            //
            // ここにマイナスキー押下時の処理を記述します。
            //
            System.Diagnostics.Debug.WriteLine("マイナスキー");
        }
    }

    関連情報