2011-01-06 6 views
0

WPFダイアログをホストするwinformダッシュボードがあります。 winform ListViewで行を選択してEnterキーを押すと、WPFダイアログを起動するOnItemActivateが呼び出されます。ただし、WPFダイアログが表示され、既定のボタン「キャンセル」がヒットしたためすぐに消えます。 Enterキーが2回トリガされたようです.1つはWPFダイアログを起動するキー、もう1つはキャンセルボタンを押すキーです。 Enterキーを押すとWPFダイアログがキャンセルされることはありません。EnterキーがWPF/Winformの混合プロジェクトで2回処理される

スタックトレースによると、WPFとWinformはEnterキーを別々に処理するようです。 WPFは、EnterキーがWinform ListViewによって処理されたことを認識しません。これはWinformとWPF interopの設計によるものですか?

EnterキーをWPFダイアログに閉じないようにするには、フォーカスをキャンセルボタンから別のコントロール(たとえば、テキストブロック)に変更する必要があります。この問題を解決する良い方法はありますか?

+0

WPFダイアログを表示する前に、WinFormsの 'Application.DoEvents()'を試してみるかもしれませんか?メッセージキューがなくなる可能性があります。 'Thread.Sleep(10)'を試してみるか、キーダウンの代わりにキーアップイベントを処理してください。 –

+0

興味深いのは! "キーダウンの代わりにキーアップイベントを処理する"ことについてのサンプルコードを教えてください。現在のコードでは、_listView_ItemActivate(オブジェクト送信者、EventArgs e)を使用してItemActivateイベントを処理します。しかし私はeからキーコードを取得する方法を知らない。あなたは知っていますか?あなたの助けに感謝! – jiangok

+0

BTW、DoEvents()が動作し、Thread.Sleepが機能しません。ありがとう。 – jiangok

答えて

0

Rickがコメントに示唆しているように、WPFダイアログを開く前にApplication.DoEvents()を呼び出してみてください。

関連する問題