複数のフォームが表示されている場合に、ショートカットコンポーネントのShortcutKeyDownイベントが全てのフォームで発生します

文書番号 : 40928     文書種別 : 使用方法     登録日 : 2017/08/25     最終更新日 : 2017/08/25
文書を印刷する
対象製品
InputMan for Windows Forms 10.0J
詳細
ShortcutKeysプロパティにショートカットキーを登録すると、アプリケーション全体で使用されるショートカットキーを設定することができます。しかし、アプリケーション全体で有効になるため、ShortcutKeyDownイベントがフォームのアクティブ・非アクティブに関わらず発生します。
アクティブなフォームでのみショートカットキーを有効にするには、ShortcutKeyDownイベントの中でフォームの状態を判断し、アクティブな状態のときのみ処理を実行します。

[Visual Basic]
Private Sub Form1_Load( ByVal sender As System.Object,  ByVal e As System.EventArgs) Handles MyBase.Load 
    ' ショートカットキーを設定します。 
    GcShortcut1.ShortcutKeys.Add( Keys.E Or Keys.Control ) 
End Sub 

Private Sub GcShortcut1_ShortcutKeyDown( ByVal sender As System.Object,  ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcShortcut1.ShortcutKeyDown 
    ' フォームがアクティブな状態のときだけメッセージボックスを表示します。 
    If Me Is Form.ActiveForm 
        ' メッセージボックスを表示します。 
        MessageBox.Show( "Ctrl + E" ) 
        ' イベント処理を終了します。 
        e.Handled = True 
    End If 
End Sub

[C#]
private void Form1_Load( object sender, EventArgs e ) 
{
    // ショートカットキーを設定します。 
    gcShortcut1.ShortcutKeys.Add( Keys.E | Keys.Control ); 
}

private void gcShortcut1_ShortcutKeyDown( object sender, KeyEventArgs e ) 
{ 
    // フォームがアクティブな状態のときだけメッセージボックスを表示します。 
    if( this == Form.ActiveForm ) 
    { 
        // メッセージボックスを表示します。 
        MessageBox.Show( "Ctrl + E" ); 
        // イベント処理を終了します。 
        e.Handled = true; 
    } 
}