首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何捕获Keys.F1而不考虑窗体上的焦点控件?

如何捕获Keys.F1而不考虑窗体上的焦点控件?
EN

Stack Overflow用户
提问于 2011-05-10 14:19:53
回答 4查看 37.4K关注 0票数 30

我使用了KeyDown事件和一些简单的代码(如if (e.KeyCode == Keys.F1) )来捕获表单上的F1,但是如果表单上有一些文本框,或者表单上有一些带有Dock Fill的电子表格,那么上面的代码就没有用了,什么也不做。但是当用户在这个表单上按下F1时,我想做一些事情。那么,我们如何在整个form..and上捕获像F1这样的特定按键事件呢?我不想转到捕获表单上所有其他控件的keydown并将它们传递给表单进行处理的路由。有没有更干净的方法来做这件事?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-10 14:22:12

是的,确实有。窗体处理键事件的正确方法是重写窗体类的ProcessCmdKey method,而不管当前具有输入焦点的控件是什么:

代码语言:javascript
运行
AI代码解释
复制
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F1)
    {
        MessageBox.Show("You pressed the F1 key");
        return true;    // indicate that you handled this keystroke
    }

    // Call the base class
    return base.ProcessCmdKey(ref msg, keyData);
}

您返回true以指示您处理了击键操作,并且不希望将其传递给其他控件。如果希望将其传递给其他控件的事件处理程序,只需返回false即可。

你最好忽略KeyPreview property。这是从VB6天开始的一个时代错误,并且在.NET世界中并不是真正的首选方法。进一步阅读:Disadvantage of setting Form.KeyPreview = true?

票数 60
EN

Stack Overflow用户

发布于 2011-05-10 14:21:23

将窗体的KeyPreview设置为true。这将确保窗体首先获得按键消息,如果您处理了它,您可以设置e.Handled = true,这样它就不会向下传递到控件。

票数 5
EN

Stack Overflow用户

发布于 2011-05-10 14:21:09

打开KeyPreview,表单中的每一次按键都将首先通过其按键事件处理程序进行路由。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5951496

复制
相关文章
WinForm设置窗体默认控件焦点
winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法:
跟着阿笨一起玩NET
2018/09/19
1.6K0
[C#]控件大小随窗体改变而改变
这篇文章写的很好,一般我会选择第一种。 我改了一下格式,便于大家复制黏贴,O(∩_∩)O。
祥知道
2020/03/10
3K0
wpf 控件大小随窗体大小改变而改变
WPF可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现 用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了 ViewBox的显示机制是,先在内存中把按照逻辑大小把子控件显示出来,然后等比例的缩放显示到ViewBox的客户区 例: Button btn = new Button(); btn.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; btn.Vertic
hbbliyong
2018/03/06
3.4K0
WindowFocusListener窗体焦点监听器
抽象适配器类接收窗口事件。 此类中的方法为空。 此类存在的目的是方便创建侦听器对象。 扩展此类可创建WindowEvent侦听器并重写所需事件的方法。 (如果要实现WindowListener界面,你必须定义在它所有的方法。此抽象类定义空对他们的所有方法,这样你就可以只需要针对所关心的事件重写方法。) 创建使用扩展的类的监听器对象,然后使用窗口的一个窗口寄存器它addWindowListener方法。 当窗口的状态借助于被打开,关闭,激活或去激活,或图标化取消图标化的变化,在收听对象中的相关方法被调用,并且WindowEvent被传递给它
JavaEdge
2021/02/22
1.2K0
WindowFocusListener窗体焦点监听器
WPF 程序如何移动焦点到其他控件
WPF 中可以使用 UIElement.Focus() 将焦点设置到某个特定的控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序中控制控件的焦点。
walterlv
2023/10/22
5590
如何在控件的设计时得到窗体设计器中的所有控件
本文转载:http://www.cnblogs.com/Ricky81317/archive/2007/01/04/611942.html
跟着阿笨一起玩NET
2018/09/18
1.2K0
代码分享:高亮显示鼠标移动到的用户窗体上的控件
这是在vbaexpress.com上找到的一段代码,非常有意思,当鼠标移动到用户窗体中的控件上时,该控件会高亮显示。这可以让我们将用户窗体界面设计得更好。
fanjy
2022/06/04
1.1K0
代码分享:高亮显示鼠标移动到的用户窗体上的控件
WinForm设置控件焦点focus
winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法:
全栈程序员站长
2022/07/15
1.9K0
WinForm中关于控件焦点的问题
例如我们希望光标在打开窗体的时候出现在textBox1上,我们只需要在Activated事件中添加如下代码:
跟着阿笨一起玩NET
2018/09/19
1.4K0
如何在多线程中调用winform窗体控件
由于 Windows 窗体控件本质上不是线程安全的。因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用和死锁的情况。于是在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationException  本文用一个很简单的示例来讲解这个问题(在窗体上放一个TextBox和一个Button,点击Button后,在新建的线程中设置TextBo
菩提树下的杨过
2018/01/22
2.3K0
跨线程调用窗体控件
本文转载:http://www.csharpwin.com/csharpspace/11279r6763.shtml
跟着阿笨一起玩NET
2018/09/18
1.3K0
[QT]屏蔽Tab键切换控件焦点
原文链接:https://blog.csdn.net/humanking7/article/details/80654775
祥知道
2020/03/10
1.9K0
↓↓↓ HTML如何局部滚动而头尾不滚动 ↓↓↓
兼容 android(4.3版本 三星 note2)进行嵌套,没有引用任何插件,纯css。
White feathe
2021/12/08
3K0
python pyqt5 窗体控件
addToolBar() centralWidget() setCentralWidget() menuBar() setStatusBar() statusBar().showMessage(message,int timeout=0)
用户5760343
2019/07/05
8260
c# winform 窗体失去焦点关闭(钩子实现)
main函数里面写 Application.ApplicationExit += Application_ApplicationExit;
冰封一夏
2019/09/10
2.9K0
C#如何在Form启动时控制焦点落在某一个控件上?
  在C#中新建一个窗体应用程序。如图,从工具箱向窗体(Form1)中依次拖入button1、button2、button3、button4。
vv彭
2021/01/14
1.3K0
C#如何在Form启动时控制焦点落在某一个控件上?
浅谈基于QT的截图工具的设计与实现
在介绍截图工具设计与实现前,让我们先通过介绍QT的绘图基础知识,让读者有一个比较感性的认识。
w4ngzhen
2023/10/18
5050
浅谈基于QT的截图工具的设计与实现
C# 线程中操作窗体控件
方法1: CheckForIllegalCrossThreadCalls = false;
zls365
2020/08/19
1.1K0
C# 线程中操作窗体控件
[C#]使用Label标签控件模拟窗体标题的移动及窗体颜色不断变换
本文讲述如何使用C#和Windows API来实现一些常见的窗口操作,包括移动窗口、改变窗口背景色和字体颜色、窗口最大化和最小化,以及隐藏窗口。通过使用Windows API和C#的System.Windows.Forms命名空间中的类,可以实现这些功能。
CNXY
2017/12/25
1.6K0
[C#]使用Label标签控件模拟窗体标题的移动及窗体颜色不断变换
【C#】让工具栏ToolStrip能触发焦点控件的Leave、Validating、DataError等事件以验证数据
----------------更新:2014-04-21---------------
AhDung
2018/09/13
1.2K0

相似问题

捕获所有键盘输入,而不考虑Windows窗体应用程序中具有焦点的控件

117

当子控件具有焦点时捕获窗体上的KeyUp事件

22

显示窗体而不抢占焦点?

198

显示窗体而不丢失焦点

11

如何确定窗体上的哪个控件具有焦点?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文