搜尋
首頁後端開發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
Win10系统如何实现双系统切换Win10系统如何实现双系统切换Jan 03, 2024 pm 05:41 PM

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

分享几个.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

无法使用win11的alt+tab切换界面,出现的原因是什么?无法使用win11的alt+tab切换界面,出现的原因是什么?Jan 02, 2024 am 08:35 AM

win11支持用户使用alt+tab快捷键的方式来调出桌面切换工具,但是最近有朋友遇到了win11alt+tab切换不了界面的问题,不知道是什么原因也不知道怎么解决。win11alt+tab切换不了界面什么原因:答:因为快捷键功能被禁用了,下面是解决方法:1、首先我们按下键盘“win+r”打开运行。2、接着输入“regedit”并回车打开组策略。3、然后进入“HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer”

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

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

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

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

win10切换输入法快捷键如何设置的步骤教程win10切换输入法快捷键如何设置的步骤教程Jul 11, 2023 pm 01:53 PM

我们在安装win10系统之后,会发现里面自带有拼音输入法和五笔输入法,当我们要切换输入法的时候,快捷键一般是Alt+shift,但有些人不习惯,想要修改,今天小编来跟大家说说win10切换输入法快捷键如何设置的教程,大家一起来看看吧。1、“WIN+X键"或者"鼠标移动到左下角右击"调出系统功能菜单,单击控制面板;2、在时钟、语言和区域选项中,单击添加语言或更换输入法其中一个,均会跳到同一界面;3、点击左上角的高级设置选项;4、高级设置下面点击“更改语言栏热键”;5、

Vue中如何处理组件的动态加载和切换Vue中如何处理组件的动态加载和切换Oct 15, 2023 pm 04:34 PM

Vue中处理组件的动态加载和切换Vue是一个流行的JavaScript框架,它提供了各种灵活的功能来处理组件的动态加载和切换。在本文中,我们将讨论一些Vue中处理组件动态加载和切换的方法,并提供具体的代码示例。动态加载组件是指根据需要在运行时动态加载组件。这样可以提高应用程序的性能和加载速度,因为只有当需要时才会加载相关的组件。Vue提供了async和awa

寻找抛物线的顶点、焦点和准线的C/C++程序寻找抛物线的顶点、焦点和准线的C/C++程序Sep 05, 2023 pm 05:21 PM

Asetofpointsonaplainsurfacethatformsacurvesuchthatanypointonthatcurveisequidistantfromapointinthecenter(calledfocus)isaparabola.Thegeneralequationfortheparabolaisy=ax2+bx+cThevertexofaparabolaisthecoordinatefromwhichittakesthesharpestturnwhereasaisth

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境