2009-06-17 3 views
2

私の.Netアプリケーションでは、キーボードイベントを受け取ると予想される特定のフォーム/コントロールの問題が続いています。私のデバッグは、すべてのコントロールでブレークポイントを設定したり、誰が持ってはいけないキーボードイベントを食べたかを見たりするなど、洞窟人をはるかに超えて進歩していません。より良い方法が必要です - そこには、キーボードのイベント処理を追跡するのに役立つツールがありますか?私のキーボードイベントを食べているコントロールを特定する方法

+0

どのキーボードイベントですか? –

+0

KeyPress、KeyDown、PreviewKeyDown –

+0

どのキーですか? –

答えて

0

まず、プロパティウィンドウ(またはデザイナファイル)をチェックして、イベントハンドラが実際にイベントに接続されていることを確認します。

+0

ありがとうございますが、私はそれほどノブのものではありません=) –

+0

よく聞いてください。あなたは洞窟人だと言っていましたので、私は基本的に考え始めました; o) –

0

通常、フォームはキープレスイベントを処理します。スタックトレースを監視するだけなのでツールはありません。最も良いアイデアはフォームのkeypressイベントでトレースステートメントを作成し(ブレークポイントを追加して右クリックし、「ヒット時」に移動)、forms.keyeventargsとsenderオブジェクトの情報を調べることです。

その他の重要な注意事項:非文字キー(ページダウン、ページアップなどを含む)は、キー押しイベントを発生させず、キーダウンおよびキーアップのみを発生させ、キー押しイベントはフォームによって「飲み込まれる」

e.Handled = true;

または

e.SuppressKeyPress = true;

を設定し、私はまた、あなたのイベントをフックするデザイナー/プロパティウィンドウを使用することをお勧めのAddHandler(VB)を使用するか、+ =(C#)BECAはありませんより複雑なフォームでは、イベントハンドラを共有する多くのコントロールのシナリオを持ち、実行時にハンドラを動的に指定します。

+0

プロパティウィンドウを使ってイベントハンドラをアタッチしても、簡単にイベントハンドラを共有することができます。 –

0

Spy ++を使用すると、Visual Studioのフルバージョン(Expressエディションまたは他のものではない)を使用していると仮定します。 Spy ++を起動すると、アプリケーションのルートウィンドウが見つけられます(Spy ++には便利な検索>ウィンドウの検索があります)。次に、Windowsのツリービューでルートウィンドウを右クリックし、メッセージを選択します。これにより、ウィンドウのすべてのメッセージの監視を開始するメッセージウィンドウが表示されます。入力を開始し、WM_KEYDOWNなどを確認します。まだキーが表示されない場合は、メッセージングオプションに移動し、「同じプロセスのWindows」をチェックします。この時点で、プロセス内のすべてのキー押しイベントを監視できるはずです。 WM_KEYDOWN(または同様の)メッセージを右クリックし、プロパティに移動します。プロパティでは、メッセージを処理したウィンドウのハンドルを表示し、それをクリックすると、Windowsのツリービューで強調表示されます。ハイライトされたウィンドウを右クリックしてハイライトを選択するだけで、フォーム上にあるコントロールを見ることができます。

関連する問題