0

私は SdlDotNet 6.1 を使用していますが、とても気に入っています :)

SurfaceControl WinForm コントロール (pictureBox)、キーの上下イベントを受信しません他のすべてのイベント (MouseDown、MouseMotion、Tick) は、Events.Run() を呼び出した後にのみ機能しているようです (スレッドをロックします...)

WinForm イベント "PreviewKeyDown" も発生しません。

これらのイベントを発生させるには、SurfaceControl にフォーカスが必要であることがわかりました。MouseMove イベントで mySurfaceControl.Select() を使用して、フォーカスを強制します。

私の問題は、keyboardDown イベントがすべてのキーで発生しないことです... AZ Escape NumLock Enter Space F1-12 Pause Home Delete で発生しました。Ctrl Shift Tab Return 1-9 1-9(num) 矢印記号では発生しません。Alt と Alt-Gr は Keys.Menu として発生します。

私の Azerty キーボード (申し訳ありませんがフランス人です) が原因ではありません。Qwerty モードでテストしました。

すべてのキーは WinForm イベント「PreviewKeyDown」で検出されますが、WinForm は PreviewKeyup イベントを提供しません...

そのため、Keyboard.IsKeyPressed は常に false を返し、KeyboardState は 323 false を返しますが、Events.IsEventEnabled() は true を返します。

AZ が押されたことを検出する必要があります: OK Ctrl/Shift/Alt が押されたかどうかを検出する必要があります: OK ではありません

何か案は ?ありがとうございました。

4

1 に答える 1

1

IsInputKey=true (PreviewKeyDownArgs 内) を試しましたが、SDL イベントには効果がありませんでした。

実際には、PreviewKeyDown 以外に KeyDown と KeyUp イベントがありますが、プロパティ ウィンドウ (Visual Studio 2010) には表示されず、これらのイベントは機能します。マウス イベントとは異なり、これらのイベントにはコントロールにフォーカスが必要です (Control.Select() がフォーカスを与えます)。

KeyboardState の方が簡単だったとしても、これらのイベントは役に立ちます。

解決しました。

于 2012-05-25T09:41:06.230 に答える