WinForm中快捷键与组合按键的设置方法
程序员文章站
2023-11-29 13:57:52
第一种方法。。代码复杂,操作简单的快捷键 新建一个空白窗体 每个窗体都有这样3个事件:keydown、keypress、keyup,keydown和keypress都是按键...
第一种方法。。代码复杂,操作简单的快捷键
新建一个空白窗体
每个窗体都有这样3个事件:keydown、keypress、keyup,keydown和keypress都是按键按下事件,但keydown用的是keycode跟键盘各个按键相对应,它对应keys枚举,用起来比较方便;而keypress用的是keychar,这个就要找asc ii编码了,不方便。keyup是按键弹起事件,不常用,因此我们使用keydown事件来设置窗体的快捷键,双击该事件后的空白生成代码,首先我们设置单个按键,让它按下f11最大化,再次按下还原,在事件中加入如下代码:
if (e.keycode == keys.f11)
{
if (windowstate == formwindowstate.maximized)
windowstate = formwindowstate.normal;
else
windowstate = formwindowstate.maximized;
}
若窗体的windowstate为maximized则还原,否则最大化,运行下试试,很好用 :-)
下面在窗体中加入一个名为txtinput的textbox,两个名为btnconfirm、btnexit的button:
if (e.modifiers == keys.alt && e.keycode == keys.d0)
{
messagebox.show("按下了alt + 0");
}
if ((int)e.modifiers == ((int)keys.control + (int)keys.alt) && e.keycode == keys.d0)
{
messagebox.show("按下了control + alt + 0");
}
private void form1_keydown(object sender, keyeventargs e)
{
if (e.keycode == keys.f1)
{
另外的,与窗体的acceptbutton属性相关联的按钮,将与键盘上的enter键对应;与窗体的cancelbutton属性相关联的按钮,将与键盘上的ecs键对应。
新建一个空白窗体
每个窗体都有这样3个事件:keydown、keypress、keyup,keydown和keypress都是按键按下事件,但keydown用的是keycode跟键盘各个按键相对应,它对应keys枚举,用起来比较方便;而keypress用的是keychar,这个就要找asc ii编码了,不方便。keyup是按键弹起事件,不常用,因此我们使用keydown事件来设置窗体的快捷键,双击该事件后的空白生成代码,首先我们设置单个按键,让它按下f11最大化,再次按下还原,在事件中加入如下代码:
复制代码 代码如下:
if (e.keycode == keys.f11)
{
if (windowstate == formwindowstate.maximized)
windowstate = formwindowstate.normal;
else
windowstate = formwindowstate.maximized;
}
若窗体的windowstate为maximized则还原,否则最大化,运行下试试,很好用 :-)
下面在窗体中加入一个名为txtinput的textbox,两个名为btnconfirm、btnexit的button:
再次运行窗体,按下f11,不起作用了?这是怎么回事?
因为这时窗体运行后,焦点已不在窗体上,而在控件上了,我们要将keypreview设置为true,向窗体注册控件上产生的键盘事件,再次运行,问题解决了。
那么组合按键又怎么设置呢?例如要按下alt和数字0,需要这样:
复制代码 代码如下:
if (e.modifiers == keys.alt && e.keycode == keys.d0)
{
messagebox.show("按下了alt + 0");
}
使用modifiers可设置组合键,键盘数字区按键的keys枚举以d打头,而小键盘上的数字以numpad打头。按下ctrl与shift组合键的方法与其类似,下面我们看看按下ctrl + alt + 数字0该怎样设置:
复制代码 代码如下:
if ((int)e.modifiers == ((int)keys.control + (int)keys.alt) && e.keycode == keys.d0)
{
messagebox.show("按下了control + alt + 0");
}
将ctrl和alt的枚举转换为int型相加后与modifiers对比,这样即可判断是否按下了该组合键。
那么 怎么触发按钮事件呢?
如按f1触发confirm按钮事件
复制代码 代码如下:
private void form1_keydown(object sender, keyeventargs e)
{
if (e.keycode == keys.f1)
{
/ /如果还有keypress事件,不让此快捷键触发其事件可加一句代码
e.handled = true; //将handled设置为true,指示已经处理过keypress事件
confirm1.performclick();////执行单击confirm1的动作
}
}
另外的,与窗体的acceptbutton属性相关联的按钮,将与键盘上的enter键对应;与窗体的cancelbutton属性相关联的按钮,将与键盘上的ecs键对应。
另外一种简单快捷键的方法
在设置button的text属性时,在一个英文字母的前面加上&(and符),例如将btnconfirm的text属性设置为:&confirm,当运行窗体,按下alt + c时,就相当于按下该键。