本文摘自PHP中文网,作者零下一度,侵删。
环境:界面上有TextBox,ComboBox等控件。不建议把左右方向键都用来切换焦点,否则你在TextBox里面改变光标所在字符位置就不方便了。
方法一:笨方法,需为每个控件单独注册事件处理
以TextBox为例,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 1 private void textbox_KeyDown(object sender, KeyEventArgs e)
2 {
3 if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)
4 {
5 e.SuppressKeyPress = true;
6 System.Windows.Forms.SendKeys.Send( "{Tab}" );
7 }
8 else if (e.KeyCode == Keys.Up)
9 {
10 e.SuppressKeyPress = true;
11 System.Windows.Forms.SendKeys.Send( "+{Tab}" );
12 }
13 }
|
方法二:简单方法,无需为每个控件单独注册事件处理,仅需在窗体类上加入如下代码:
1 2 3 4 5 6 7 8 9 10 | 1
6 {
7 System.Windows.Forms.SendKeys.Send( "{Tab}" );
8 return true;
9 }
10 else if (e.KeyCode == Keys.Up)
11 {
12 System.Windows.Forms.SendKeys.Send( "+{Tab}" );13 return true;
14 }
15 return base.ProcessCmdKey(ref msg, keyData);16 }
|
到此,切换控件焦点的功能已实现,现在有个新的需求,窗体界面上有两个ComboBox控件cmbMeas和cmbRemark,我希望在这两个控件上Enter回车时提交,而不是切换焦点,那怎么办呢?那就需要判断当前拥有焦点的控件是不是cmbMeas或cmbRemark,上面的代码需要稍微改动下,具体代码如下:
1 2 3 4 5 6 7 8 9 10 | 1
22 {
23 System.Windows.Forms.SendKeys.Send( "{Tab}" );
24 return true;
25 }
26 else if (e.KeyCode == Keys.Up)
27 {
28 System.Windows.Forms.SendKeys.Send( "+{Tab}" );29 return true;
30 }
31 return base.ProcessCmdKey(ref msg, keyData);32 }
|
说明:
Control.FromHandle 方法
阅读剩余部分
相关阅读 >>
入门级的.net mvc 实例
ants performance profiler(.net性能调优教程)
c#开发微信门户及应用(一)之微信接口的如何使用(图)
c#中关于list<t>的并集与交集以及差集解析
c#中的抽象类与接口的详解
c# 多线程--线程池的详细介绍
c#中关于静态与非静态方法的区别介绍
关于url后面传中文方法总结
详细介绍.net中的性能改进
.net core认证管理解析
更多相关阅读请进入《csharp》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#中方向键与回车键切换控件焦点的两种方法