Form中的keypress事件不能用
Form中的keypress事件不能用
编写人:CC阿爸
2015-4-8
近期在修改系统时,想给一画面增加一个组合键功能,但在form_keypress事件中加入代码,但无论如何也不能触发该动作。
今天在这里,我想与大家一起分享代码不执行的原因,在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。
1、 首先找到我出问题的根本原因是:KeyPreview 没有设置true ,如果没有设置为true,画面如果有button存,象return enter之类集点肯定会在button上。
所以第一时间先将KeyPreview 设置为true。
2、 下面再看看如何处理组合键的问题:
1) 二个组合键比较容易处理
private void frmLocalUpdate_KeyPress(object sender, KeyPressEventArgs e) //CTRL+S
{
if ((Control.ModifierKeys & Keys.Control) == Keys.Control && e.KeyChar==)
{
OpenUpload();
}
}
要指定在按键(如 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 }
}
return base.ProcessCmdKey(ref msg, keyData);
12 }
具体就需要各位好好的去自已去调试了。
3、有关更多的技术分享,大家可以加入我们的技术群。
欢迎加入技术分享群:238916811
Form中的keypress事件不能用的更多相关文章
- [Form Builder]Form中的validate验证事件
转:http://yedward.net/?id=70 Form的validate行为可以由一个总的form级别的validation属性来控制,可以通过set_form_property来设置成PR ...
- form中的button默认提交事件
<form action=""> <input autocomplete="off" type="text" name=& ...
- C# winform KeyPress 事件中对应的数字
C# winform KeyPress 事件中对应的数字所有e.KeyChar值的意思 常用ASCII码表 你自己看看应该就明白了 键盘 ASCII码 键盘 ASCII码 ESC 27 7 55 S ...
- asp.net中按钮回车事件(转自http://www.cnblogs.com/adinet/archive/2013/03/03/2941424.html)
在做ASP.net WEB应用的时候,常常遇到会在同一个页面里添加多个按钮,而每个按钮肯定都会触发页面回送事件. 在ASP.NET中,只能指定一个带有runat="server"的 ...
- 如何让Form窗体接收KeyDown事件?
在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息.当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响应 ...
- 深入了解jquery中的键盘事件
很多时候,我们需要获取用户的键盘事件,下面就一起来看看jquery是如何操作键盘事件的. 一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() k ...
- C#中WinForm窗体事件的执行次序
C#中WinForm窗体事件的执行次序如下: 当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件: System.Windows.Forms.Control ...
- 分分钟用上C#中的委托和事件之窗体篇
上次以鸿门宴的例子写了一篇名为<分分钟用上C#中的委托和事件>的博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用 ...
- ligerui_实际项目_003:form中添加数据,表格(grid)里面显示,最后将表格(grid)里的数据提交到servlet
实现效果: "Form"中填写数据,向本页"Grid"中添加数据,转换成Json数据提交,计算总和,Grid文本框可编辑,排序 图片效果: 总结: //disp ...
随机推荐
- Java堆(heap)、栈(stack)和队列的区别
Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...
- fiddler几种功能强大的用法(二)
参考网址:http://blog.rekfan.com/articles/228.html http://www.cnblogs.com/tugenhua0707/p/4637771.html htt ...
- [Opencv]图像的梯度与边缘检测(转)
文章来源:https://blog.csdn.net/on2way/article/details/46851451 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的. ...
- POJ 2762 Going from u to v or from v to u? (判断单连通)
http://poj.org/problem?id=2762 题意:给出有向图,判断任意两个点u和v,是否可以从u到v或者从v到u. 思路: 判断图是否是单连通的. 首先来一遍强连通缩点,重新建立新图 ...
- UVa 1635 无关的元素(唯一分解定理+二项式定理)
https://vjudge.net/problem/UVA-1635 题意: 给定n个数a1,a2,...an,依次求出相邻两数之和,将得到一个新数列.重复上述操作,最后结果将变成一个数.问这个数除 ...
- data.table 中的动态作用域
data.table 中最常用的语法就是 data[i, j, by],其中 i.j 和 by 都是在动态作用域中被计算的.换句话说,我们不仅可以直接使用列,也可以提前定义诸如 .N ..I 和 .S ...
- 使用 Redis
Redis(https://redis.io/),既不像 SQLite 以表的形式存储数据,也不像 MongoDB 允许以嵌套结构存储和查询,它是一种内存数据库结构,即将数据缓存在内存中.它将键—值( ...
- Java IO流-序列化流和反序列化流
2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者 ...
- Java语言发展史和eclipse配置
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 【解决方案】django初始化执行python manage.py migrate命令后,除default数据库之外的其他数据库中的表没有创建出来
[问题原因]:django工程中存在多个应用,每个应用都指定了对应的数据库.执行python manage.py migrate命令时没有指定数据库,将只初始化默认的default数据库. [解决方案 ...