.net winform 的 OnKeyDown 与 方向键
随手写了一个小程序,突然遇到一个问题:
在自定义的控件中,override了一个OnKeyDown,用于处理方向键。结果,无效,跟踪调试发现,方向键无法进入函数断点,但其它如数字字母等键可以。
上网查了一下,发现不少人遇到同样的问题。不过不是在自定义控件中,是在窗体中。当然,解决的方法很简单,设置KeyPreview为true就可以了。
自定义控件可没有KeyPreview属性。
为什么方向键会这么特殊?很简单,原来,方向键、制表键(Tab)等用于窗体中的各个子控件的焦点切换,因此在OnKeyDown之前就被截获并处理掉了。
知道原因了,解决起来就好办了:
在自定义控件中如需要处理方向键,应该override OnPreviewKeyDown/OnPreviewKeyUp等弊病数就可以了。