C# 关于按钮和键盘的问题 50

我用C#语言编写了一个计算器,“=”键是Button17,现在想按enter键等价于按“=”,也就是enter键关联按钮button17,别的按扭和键盘都用代码写好了,而... 我用C# 语言编写了一个计算器,“=”键是Button17,现在想按enter键等价于按“=”,也就是enter键关联按钮button17,别的按扭和键盘都用代码写好了,而且都能用。唯独enter键关联不了,后来改用设置窗体form1的accetpbutton属性=button17,但还是不起作用。按ernter键只会触发具有焦点的按钮,焦点会随着鼠标的点击停留在最后一个点击的按钮上。我想问3个问题。第一在没有定义enter键事件的情况下,为什么enter键会触发具有焦点的按钮,是系统编写的代码吗? 第二: 焦点能否取消,使每个按钮都不具有焦点,或者让焦点只停留在某一个固定按钮上? 第三:我设置的accetpbutton=button17为何不起作用?第四:还有空格键也是默认执行具有焦点的按钮,在哪定义的? 请高手大师百忙之余帮我解答下,在下不胜感激,提前谢过。
大家好,经过长时间的研究终于研究出来了,windows消息机制和应用软件处理机制的完美解释。我们每按下一个键盘,首先由键盘驱动程序翻译成windows虚拟键码,再由windows打包成固定格式的消息(有很多种类型如:WM_KEYUP、WM_KEYDOWN等等)放入windows消息列队,之后发往对应程序的消息列队,然后再由应用程序的消息处理机制(这个处理机制是一直循环的,不停接受消息处理消息、只到程序退出,循环原理是一系列循环函数)进行处理,处理分为两个阶段,第一是预处理由PreProcessMessage函数处理,第二是处理由WnProc函数处理。这两个阶段十分复杂,这两个函数是调用一些列的函数处理,我们的方向键、Enter键等等就是在预处理阶段被处理了,因为这个处理机制是被封装好的,所以要想我们的Enter键能够完成我们定义的快捷键效果,那就必须在预处理阶段找到这个处理函数,并拦截重写这个虚方法(函数)。
展开
 我来答
benben239
2015-11-13 · TA获得超过864个赞
知道小有建树答主
回答量:612
采纳率:100%
帮助的人:485万
展开全部
我试着回答你以下几个问题:
1、按下Enter会触发具有焦点的按钮,这个没什么好解释的,这是TX内部的写法,你也可以写你自己需要的控件,取消这一功能

2、由于你单击其他按钮后,焦点停留在你点击的那个按钮上,窗体绑定的按钮将失效,我想到的方法就是在每个点击的按钮里写上 窗体绑定的按钮.Focus()

3、失去焦点当前不起作用了

4、也许空格和Enter都属于空白字符吧

反正你的核心问题就是为什么绑定的按钮失效:
要么当你点击其他按钮的时候让你点击的按钮失去焦点
要么在每个按钮的点击事件里都加上 窗体绑定的按钮.Focus() 强制获取焦点
追问
问题已经解决,根本的问题研究清楚了,在问题补充里面, 不过同样感谢你的回答,再次谢过。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式