当前位置:编程学习 > C#/ASP.NET >>

烦恼! 窗口里的两个控件都响应了同一个键盘事件


按方向键的时候只希望上面picturebox里的小矩形移动,可是下方的dataGridview中的选定cell也动了


keyDown事件是加在form里的,因为picturebox没有keyDown事件。

怎么样才能按方向键时,只有上面的小矩形移动,而datagridview选不响应这个key事件呢?

--------------------编程问答-------------------- keydown订阅在picturebox外面一层的容器上(panel) --------------------编程问答-------------------- 你那个dataview的操作放在keydown事件里面没呢? --------------------编程问答-------------------- 我了解你的意思了,你如果界面上没有输入的操作话,
可以弄一个textbox隐藏在picturebox外面容器的下方
然后订阅这个textbox的keydown事件 --------------------编程问答--------------------
引用 3 楼 wyfde123 的回复:
我了解你的意思了,你如果界面上没有输入的操作话,
可以弄一个textbox隐藏在picturebox外面容器的下方
然后订阅这个textbox的keydown事件


没懂~~

我需要按方向键,这样才能移动窗口上半部里面选定的小矩形, 可是我按方向键的时候不希望下方的datagridview的兴趣点动来动去,因为如果datagridview数据多的话,兴趣点挪动会导致scroll动作,把我感兴趣的datagridview数据给遮盖了。

--------------------编程问答-------------------- 就是把焦点一直放在这个隐藏的textbox上,在keydown里面写移动的方法
然后 按方向键 就不会使 gridview 获得焦点了 --------------------编程问答--------------------
引用 5 楼 wyfde123 的回复:
就是把焦点一直放在这个隐藏的textbox上,在keydown里面写移动的方法
然后 按方向键 就不会使 gridview 获得焦点了


不行啊~
点一下那个textbox的话,焦点就在这个textbox上了,这时候datagridview的兴趣点是不动了,可是小矩形也移动不了了。。 --------------------编程问答-------------------- 有什么办法可以有选择性的让一个控件的key事件无效吗?
datagridview的key事件显然是集成在这个控件里的 --------------------编程问答-------------------- http://msdn.microsoft.com/zh-cn/library/system.windows.forms.picturebox_events(v=VS.80).aspx

试试PreviewKeyDown  事件。在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生)。 (从 Control 继承。)  --------------------编程问答-------------------- 设置dataGridView的e.Handle=false --------------------编程问答-------------------- 重写pictureBox,然后把pictureBox用SetStyle属性来设置成可以接受焦点的对象,看是否能响应KeyDown事件,后者自己添加响应的事件,自己引发
就是如果自己有焦点的情况下如果检测到了键盘按下就可以引发事件,可以用局部键盘钩子实现
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,