0

Windowsフォームアプリケーションを作成しています。いくつかのキーボード ショートカットを押した後、いくつかのアクションを実行する必要があります。私はこの部分を持っています:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = Keys.Control & Keys.T Then
        'Wait till mouse clicks one of application controls
        'And get selected control information
    Else
        MyBase.ProcessCmdKey(msg, keyData)
    End If
End Function

また、このキーボード キーの組み合わせが押された後、マウス クリックで選択されるコントロールを取得する必要があります。すべてのメイン フォーム コントロールでイベントを作成することはできません (たとえそれが可能であったとしても、それはばかげた選択だと思います)。

私が持っている解決策の1つは Me.ActiveControl ですが、ラベルやその他のフォーカスできないコントロールにフォーカスすることはできません。したがって、それはおそらく正しい選択ではありません。

私が見つけた別の解決策はグローバルフックですが、その使用方法がわかりません。あなたの助けとアドバイスを求めています。グローバルフックのサンプルまたはマウスクリックコントロールを取得するためのより良い解決策がある場合は、それを共有してください:)

4

1 に答える 1

0

あなたの現在のアプローチは、Windows プログラミングでは逆です。

正しいアプローチは、Ctrl+T が押されている場合にコントロールのクリック イベントをチェックインし、それに応じて応答することです。

  1. Win API 'GetKeyState' をインポートする
  2. 「GetKeyState」を使用して、Ctrl キーと T キーが押されているかどうかを確認します。

詳細については、PInvoke ページを参照してください。

すべてのコントロールのクリック イベントを処理する正しい方法は、すべてのコントロールの中央クリック イベント ハンドラーを追加し、そのハンドラーにキー ダウン ロジックを配置することです。

これらは、WinForms に関するより深い知識を必要とする高度な手法です。

于 2012-11-08T20:05:15.430 に答える