Form中的keypress事件不能用

Form中的keypress事件不能用

编写人:CC阿爸

2015-4-8

近期在修改系统时,想给一画面增加一个组合键功能,但在form_keypress事件中加入代码,但无论如何也不能触发该动作。

今天在这里,我想与大家一起分享代码不执行的原因,在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。

 

1、 首先找到我出问题的根本原因是:KeyPreview   没有设置true  ,如果没有设置为true,画面如果有button存,象return  enter之类集点肯定会在button上。

所以第一时间先KeyPreview 设置为true。

2、 下面再看看如何处理组合键的问题:

1)         二个组合键比较容易处理

1 private void frmLocalUpdate_KeyPress(object sender, KeyPressEventArgs e)  //CTRL+S
2         {
3             if ((Control.ModifierKeys & Keys.Control) == Keys.Control && e.KeyChar==19)
4             {
5                 OpenUpload();
6             }
7         }

要指定在按键(如 Enter 或 Tab)时不显示的字符,以及表示操作而不表示字符的键,请使用下表中的代码。



代码


Backspace


{BACKSPACE}、{BS} 或 {BKSP}


Break


{BREAK}


Caps Lock


{CAPSLOCK}


Del 或 Delete


{DELETE} 或 {DEL}


向下键


{DOWN}


End


{END}


Enter


{ENTER} 或 ~


Esc


{ESC}


Help


{HELP}


Home


{HOME}


Ins 或 Insert


{INSERT} 或 {INS}


向左键


{LEFT}


Num Lock


{NUMLOCK}


Page Down


{PGDN}


向上翻页


{PGUP}


Print Screen


{PRTSC}(保留供将来使用)


向右键


{RIGHT}


Scroll Lock


{SCROLLLOCK}


TAB


{TAB}


向上键


{UP}


F1


{F1}


F2


{F2}


F3


{F3}


F4


{F4}


F5


{F5}


F6


{F6}


F7


{F7}


F8


{F8}


F9


{F9}


F10


{F10}


F11


{F11}


F12


{F12}


F13


{F13}


F14


{F14}


F15


{F15}


F16


{F16}


数字键盘加号


{ADD}


数字键盘减号


{SUBTRACT}


数字键盘乘号


{MULTIPLY}


数字键盘除号


{DIVIDE}

要指定与 Shift、Ctrl 和 Alt 键的任意组合一起使用的键,请在这些键代码之前加上以下一段或多段代码。



代码


Shift


+


Ctrl


^


Alt


%

要指定在按一些键时应同时按住 Shift、Ctrl 和 Alt 键的任意组合,请将这些键的代码放在括号内。 例如,要指定按 E 和 C 时同时按住 Shift 键,请使用“+(EC)”。 要指定按 E 时应按住 Shift,之后按 C 时不按住 Shift,请使用“+EC”。

要指定重复键,请使用格式 {key number}。 键和数字之间必须放一空格。 例如,{LEFT 42} 表示按向左键 42 次;{h 10} 表示按 H 10 次。

(以上部分是摘自微软的msdn 详情可参考:https://msdn.microsoft.com/zh-cn/library/system.windows.forms.sendkeys.send.aspx)

2)         三个键:处理三个键的组合就比较麻烦,利用上面的方法我是没有成功过。

这时候我们可能就得利用重写ProcessCmdKey了

1 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
 2         {
 3             if ((keyData & Keys.Alt) == Keys.Alt)//检测到alt
 4             {
 5                 if ((keyData & Keys.Control) == Keys.Control)
 6                 {
 7                     System.Windows.Forms.SendKeys.Send("^%");
 8                     return true;
 9                 }
10             }
11             return base.ProcessCmdKey(ref msg, keyData);
12         }

具体就需要各位好好的去自已去调试了。

3、有关更多的技术分享,大家可以加入我们的技术群。

欢迎加入技术分享群:238916811

时间: 2025-01-11 18:13:45

Form中的keypress事件不能用的相关文章

[Form Builder]Form中的validate验证事件

转:http://yedward.net/?id=70 Form的validate行为可以由一个总的form级别的validation属性来控制,可以通过set_form_property来设置成PROPERTY_TRUE 和 PROPERTY_FALSE.当程序的焦点离开当前validation_unit(验证单元)时候,就会触发该validation_unit的validate事件,Validation unit的级别又是通过form的validation unit属性来设置的,有以下属性值

.NET winform 的keypress事件中判断当用户按下的是哪个键

keys是按键的枚举类型 private void txtPropertyValue_KeyPress(object sender, KeyPressEventArgs e) { if ((Keys)e.KeyChar == Keys.Enter) { Save(); } } .NET winform 的keypress事件中判断当用户按下的是哪个键

如何让Form窗体接收KeyDown事件?

在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息.当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响应这些消息了,因为这些消息都由其上的控件所处理掉并且不再发给父窗体. 响应窗体上的按键消息是很有必要的.Form类有一个KeyPreview的属性,可以让它接收得到按键消息. 该值指示在将键事件传递到具有焦点的控件前,窗体是否将接收此键事件.如果窗体将接收所有键事件,则为true:如果窗体上当前选定控

HTML 之 Web页面表单form中只有一个input的text元素,按回车默认提交

WEB开发中,如果页面的 form 中只有一个input元素,在该input元素的输入框中按回车(注:此时并没有写对应的onkeydown等事件处理),则浏览器会默认提交表单,请看如下代码: <html> <head> <title>页面中只有一个input元素时默认提交表单</title> </head> <body> <form action="http://www.baidu.com" name=&qu

JavaScript中的Event事件对象详解

JavaScript事件[event] 在JavaScript中对于事件来讲,首先,我们需要了解这样几个概念:事件:事件处理程序:事件类型:事件流:事件冒泡:事件捕获:事件对象:浏览器内核:事件绑定:事件方面的性能优化(事件委托.移除事件处理程序):常见的浏览器兼容问题等. 什么是事件event: JavaScript事件是:浏览器.文档(document)窗口中的发生的特定的交互瞬间:而JavaScript和HTML之间的交互行为就是通过事件来触发的. 事件处理程序: 事件处理程序:我们用户在

Delphi中窗体的事件

Delphi中窗体的事件 Form窗体可以响应各种各样的时间,在Object Inspector的Events页面中罗列了一大堆,如下图: 下面将要列出一些常用的事件. 1.OnActivate 当窗体被初始激活时,就会发生OnActivate事件,当初始创建窗体或者用户从一个窗体切换到另一个窗体时,就可能激活窗体,Application对象也有一个OnActivate事件,当用户从一个应用程序切换到另一个应用程序时,就会产生此事件. 2.OnClose和OnCloseQuery 当关闭一个应用

form中只有一个input刷新页面问题

方法1: 在文本域元素中加入onkeydown或者onkeypress事件,判断若用户点击了回车就阻止默认行为 <body> <form> <input type="text" onkeypress="if(event.keyCode==13 || event.which==13){return false;}" /> </form> </body> 方法2: 在form中再加入一个隐藏的文本域 <i

ligerui_实际项目_003:form中添加数据,表格(grid)里面显示,最后将表格(grid)里的数据提交到servlet

实现效果: "Form"中填写数据,向本页"Grid"中添加数据,转换成Json数据提交,计算总和,Grid文本框可编辑,排序 图片效果: 总结: //display属性: editor:grid表格可以编辑其类容: //select类型:select+render实现选择填充效果 editor:{ type:"select", data:[{id:"1",text:"品牌一"},{id:"2&q

jQuery - 中文輸入法與KeyDown/KeyPress事件

最近專案中引用了Telerik ASP.NET擴充元件AutoComplete輸入欄位,測試時發現偶爾會不聽始喚,輸入文字時無法觸發資料查詢,在Javascript Source Code裡反覆追蹤測試,燃燒了可觀的寶貴春青,終於理出頭緒: 問題在中文輸入法! 過去模糊地知道中文輸入在瀏覽器的鍵盤事件行為上有些特殊,但從未深究,這回算是比較清楚研究其中的差別.其實最明顯的差異是: 切到中文輸入法後,輸入文字將不會觸發KeyPress事件,只會有KeyDown,而且傳回的e.keyCode會一律是