我想做一个游戏的地图编辑器。它的一个程序将有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