我想做一個遊戲的地圖編輯器。它的一個程序將有Windows窗體UI(如propertyGrid編輯對象的屬性),但它也將有一個面板將繪製地圖。C#重點形式和箭頭鍵
我想要什麼:
當重點是與地圖面板上,我想用鍵盤來移動地圖(箭頭鍵),添加對象(數字鍵)等焦點時未啓用上這個小組,我想的按鈕正常工作在Windows窗體 - 控件等之間允許標籤
我的形式如下:
它具有的MenuStrip(主菜單ToolStripControl )和一個statusStrip(用於狀態欄)。在窗體(或者工具欄控件)的中間,SplitControl被停靠(dock = fill),它有兩個面板。面板1有PanelMap - 顯示地圖的面板,面板2有其他所有東西,如propertygrid,tabcontrols,按鈕等。
我將KeyPreview的form設置爲true,並在窗體的keydown事件處理程序中處理鍵盤事件。
現在,如果我將焦點分配給PanelMap,下一次按下箭頭鍵,NO KeyDown事件觸發時會發生什麼。沒有一個!即使是應該處理所有事件的形式,因爲它具有「KeyPreview」,甚至不會觸發它。當我按下箭頭時,PanelMap失去了對SplitControl的重點。
好吧,我想,也許PanelMap不應該有焦點,讓焦點SplitControl(如果我按下箭頭鍵,而它有焦點,我可以處理它,所以它不會走得更遠)。但是,如果任何類似於SplitControl內部的文本框的內容都有焦點,那麼SplitControl無法獲得焦點。 .Focus()將不會執行任何操作 - 焦點將保留在已有的控件中!
它爲什麼這麼奇怪?爲什麼當面板具有焦點並按下箭頭鍵時,Form的KeyDown不會觸發?爲什麼當我調用.Focus()即使CanFocus = true時,SplitControl也不會被聚焦?
最終,我如何實現我想要的?有沒有辦法做到這一點?
覆蓋窗體的ProcessCmdKey()吞下按鍵。如果您沒有進一步處理按鍵,只需返回false即可。 – 2012-03-30 18:19:09