ゲーム用のマップエディタを作成します。 Windows Forms UI(オブジェクトのプロパティを編集するpropertyGridなど)を持つプログラムですが、マップが描画されるパネルもあります。私が欲しいものフォームと矢印キーのC#フォーカス
:フォーカスがマップをパネル上にある場合
、私はイマイチに集中するとオブジェクト(数字キー)などを追加し、周り(矢印キー)のマップを移動するためにキーボードを使用したいのですがこのパネルは、私は、Windowsフォームで通常通りに動作するようにボタンが欲しい - コントロール間のタブに許可するなど
私のフォームは、次のようになります。
それは、メインメニューのmenuStripを(持っているToolStripControlを持っています)とstatusStrip(ステータスバー用)を使用します。フォーム(またはツールストリップコントロール)の中央で、SplitControlが2つのパネルを持つドックされます(ドック=塗りつぶし)。パネル1にはPanelMapがあり、地図を表示するPanel、Panel 2にはpropertygrid、tabcontrols、buttonsなどのその他すべてのものがあります。
フォームのKeyPreviewをtrueに設定し、フォームのkeydownイベントハンドラでキーボードイベントを処理しました。
ここで、PanelMapにフォーカスを割り当てると、次に矢印キーを押したときにKeyDownイベントが発生しません。 1つではありません! 「KeyPreview」を持っているので、すべてのイベントを処理するはずのフォームでさえも、そのイベントは発生しません。矢印を押すと、PanelMapはSplitControlに向かってフォーカスを失います。
PanelMapはフォーカスを持っていないと思われます。SplitControlにフォーカスを当てることができます(フォーカスがある間に矢印キーを押すと、それ以上の処理をすることができます)。しかし、SplitControlの内部にあるテキストボックスのようなものにフォーカスがあると、SplitControlはフォーカスを取得できません。 .Focus()は何もしません - それを持っていたコントロールにフォーカスが残ります!
なぜそれは異常に機能するのですか?パネルにフォーカスと矢印キーが押されているときに、フォームのKeyDownが起動しないのはなぜですか? CanFocus = trueでも、なぜ私は.Focus()を呼び出すと、SplitControlにフォーカスが当てられないのですか?
最終的に、私は何をしたいのですか?それを行う方法はありますか?
オーバーライドは、フォームのProcessCmdKey()キーストロークを飲み込むします。それ以上処理されるキーストロークを行っていない場合は、単にfalseを返します。 –