首页 后端开发 C#.Net教程 C#中方向键与回车键切换控件焦点的两种方法

C#中方向键与回车键切换控件焦点的两种方法

Jun 23, 2017 pm 04:24 PM
.net 切换 回车 控件 方向 焦点

环境:界面上有TextBox,ComboBox等控件。

不建议把左右方向键都用来切换焦点,否则你在TextBox里面改变光标所在字符位置就不方便了。

方法一:笨方法,需为每个控件单独注册事件处理

以TextBox为例,代码如下:

 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 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 3 { 4     Keys key = (keyData & Keys.KeyCode); 5     if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)             
 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 //API声明:获取当前焦点控件句柄       2 [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)] 3 internal static extern IntPtr GetFocus(); 4  5 //获取当前拥有焦点的控件 6 private Control GetFocusedControl() 7 { 8      Control focusedControl = null; 9      // To get hold of the focused control:10      IntPtr focusedHandle = GetFocus();11      if (focusedHandle != IntPtr.Zero)12          //focusedControl = Control.FromHandle(focusedHandle);13          focusedControl = Control.FromChildHandle(focusedHandle);14      return focusedControl ;15  }16 17 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)18 {19     Keys key = (keyData & Keys.KeyCode);20     Control ctrl = GetFocusedControl();21     if (e.KeyCode == Keys.Down || (key == Keys.Enter && ctrl.Name != "cmbMeas" && ctrl.Name != "cmbRemark"))             
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 方法

返回当前与指定句柄关联的控件;如果找不到带有指定句柄的控件,就返回空引用。

Control.FromChildHandle 方法

如果需要返回拥有多个句柄的控件,应使用 FromChildHandle 方法。

此方法沿着窗口句柄父级链向上搜索,直到找到与控件关联的句柄。此方法比 FromHandle 方法更可靠,因为它正确返回拥有多个句柄的控件。

对于用户自定义控件,应当使用FromChildHandle 方法。

以上是C#中方向键与回车键切换控件焦点的两种方法的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

小米14Ultra如何切换4g和5g? 小米14Ultra如何切换4g和5g? Feb 23, 2024 am 11:49 AM

小米14Ultra是今年小米中非常火热的机型之一,小米14Ultra不仅仅升级了处理器以及各种配置,而且还为用户们带来了很多新的功能应用,从小米14Ultra销量就可以看出来手机的火爆程度,不过有一些常用的功能可能你还没了解。那么小米14Ultra如何切换4g和5g呢?下面小编就为大家介绍一下具体的内容吧!小米14Ultra怎么切换4g和5g?1、打开手机的设置菜单。2、设置菜单中查找并选择“网络”、“移动网络”的选项。3、移动网络设置中,会看到“首选网络类型”选项。4、点击或选择该选项,会看到

win11家庭版切换专业版操作教程_win11家庭版切换专业版操作教程 win11家庭版切换专业版操作教程_win11家庭版切换专业版操作教程 Mar 20, 2024 pm 01:58 PM

Win11家庭版怎么转换成Win11专业版?在Win11系统中,分为了家庭版、专业版、企业版等,而大部分Win11笔记本都是预装Win11家庭版系统。而今天小编就给大家带来win11家庭版切换专业版操作步骤!1、首先在win11桌面此电脑上右键属性。2、点击更改产品密钥或升级windows。3、然后进入后点击更改产品密钥。4、再输入激活密钥:8G7XN-V7YWC-W8RPC-V73KB-YWRDB,选择下一步。5、接着就会提示成功,这样就可以将win11家庭版升级win11专业版了。

Win10系统如何实现双系统切换 Win10系统如何实现双系统切换 Jan 03, 2024 pm 05:41 PM

很多朋友刚接触win系统的时候可能用不习惯,电脑中存着双系统,这个时候其实是可以双系统切换的,下面就一起来看看两个系统切换的详细步骤吧。win10系统如何两个系统切换方法一、快捷键切换1、按下“win”+“R”键打开运行2、在运行框中输入“msconfig”点击“确定”3、在打开的“系统配置”界面中选择自己需要的系统点击“设为默认值”,完成后“重新启动”即可完成切换方法二、开机时选择切换1、拥有双系统时开机会出现一个选择操作界面,可以使用键盘“上下”键进行选择系统

切换苹果电脑双系统启动方式 切换苹果电脑双系统启动方式 Feb 19, 2024 pm 06:50 PM

苹果双系统开机怎么切换苹果电脑作为一款功能强大的设备,除了搭载自家的macOS操作系统外,也可以选择安装其他操作系统,比如Windows,从而实现双系统的切换。那么在开机时,我们如何切换这两个系统呢?本文就来为大家介绍一下在苹果电脑上如何实现双系统的切换。首先,在安装双系统之前,我们需要确认自己的苹果电脑是否支持双系统切换。一般来说,苹果电脑都是基于

C#的就业前景如何 C#的就业前景如何 Oct 19, 2023 am 11:02 AM

无论您是初学者还是有经验的专业人士,掌握C#将为您的职业发展铺平道路。

excel切换工作簿快捷键的使用方法 excel切换工作簿快捷键的使用方法 Mar 20, 2024 pm 01:50 PM

在excel软件的应用里,我们已经习惯使用快捷键,让有些操作变得更简单和快捷,excel的多个表格之间有时候会有相关的数据,我们在查看时,要不停的切换工作簿,如果有更快捷的切换方法,就会省下很多切换浪费的时间,对工作效率的提高有很大的帮助,什么办法可以完成快速的切换呢,针对这个问题,小编今天要讲的内容是:excel切换工作簿快捷键的使用方法。1、首先在打开的excel表格的下方可以看到有多个工作簿,需要快捷切换不同的工作簿,如下图所示。  2、然后按下键盘上的Ctrl键不动,如果需要向右选择工作

java怎么读取回车 java怎么读取回车 Mar 22, 2024 pm 04:57 PM

在 Java 中,回车通常由换行符表示。Windows 系统中使用 "\r\n" 表示回车换行,而 Unix/Linux 系统中则使用 "\n"。读取包含回车的文本时,Java将这些字符视为普通字符。可以使用 BufferedReader 或 Scanner 类从输入流中读取文本,直到遇到回车换行符。

分享几个.NET开源的AI和LLM相关项目框架 分享几个.NET开源的AI和LLM相关项目框架 May 06, 2024 pm 04:43 PM

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

See all articles