- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想知道 Form.KeyPreview 属性到底有什么用?它为什么存在,我将其设置为 true 有什么“风险”?我想它一定有一些负面影响 - 否则它根本不应该存在(或者至少默认情况下是正确的)?
编辑:我非常清楚它的作用。我在问为什么。为什么我必须将它设置为 true 才能触发键盘事件?为什么键盘事件总是不会为表单触发。什么不只是标准行为?
我问的具体原因是:我刚刚在我的应用程序的基本形式中设置了 KeyPreview = true,所有其他形式都继承自该形式。我会遇到任何令人讨厌的惊喜吗?
最佳答案
Form.KeyPreview 有点不合时宜,继承自用于表单设计的 Visual Basic 对象模型。回到 VB6 时代,您需要 KeyPreview 才能实现快捷键击。在 Windows 窗体中不再需要它,覆盖 ProcessCmdKey() 是更好的解决方案:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == (Keys.Control | Keys.F)) {
DoSomething(); // Implement the Ctrl+F short-cut keystroke
return true; // This keystroke was handled, don't pass to the control with the focus
}
return base.ProcessCmdKey(ref msg, keyData);
}
但是在 2000 年代初期,支持 KeyPreview 以帮助大量 VB6 程序员切换到 .NET。 KeyPreview 或 ProcessCmdKey() 的目的是让您的 UI 响应快捷键击。键盘消息通常发送到具有焦点的控件。 Windows 窗体消息循环允许代码在控件看到它之前先查看该消息。这对于快捷键很重要,为可能获得焦点以检测它们的每个控件实现 KeyDown 事件是非常不切实际的。
将 KeyPreview 设置为 True 不会导致问题。窗体的 KeyDown 事件将运行,只有当它具有对击键执行某些操作的代码时才会产生影响。但请注意,它紧跟 VB6 用法,您看不到用于导航的那种击键。与对话框的光标键和 Tab、Escape 和 Enter 类似。 ProcessCmdKey() 不是问题。
关于.net - 设置 Form.KeyPreview = true 的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386695/
我希望在框架内有一个 KeyPreview 功能,我的意思是,当输入(例如,选择框架的一个控件,或者鼠标位于内部)位于框架中时(该框架将有多个面板)和其他控件),然后用户按下的键首先由框架处理。 有办
我和一位同事正在争论哪种方式对系统资源的负担较小。 (注意:这不是我想要答案的问题。相反,标题和下面粗体的行是我寻求答案的问题。) 1. Using KeyPreview to get the key
在 .Net 中有一个称为 KeyPreview 的功能。我怎样才能在 WinApi 中做到这一点。也许我不一定需要这个,但我的 hWnd 有 WM_KEYDOWN,但是当我的文本框有焦点时它不会收到
我正在考虑为我的一些应用程序从 WinForms 转向 WPF,目前我正在研究组合的条形码阅读器/文本输入程序(医疗保健患者表格)。 为了能够处理条形码字符,我依赖 WinForms 中的 Keypr
我正在构建一个小型表单应用程序,我才刚刚开始。但我有这个问题:如果我将控件放入窗体,则不会触发 KeyDown 事件。我知道 KeyPreview属性,并将其设置为 true。但这没有帮助... :(
我想知道 Form.KeyPreview 属性到底有什么用?它为什么存在,我将其设置为 true 有什么“风险”?我想它一定有一些负面影响 - 否则它根本不应该存在(或者至少默认情况下是正确的)? 编
我正在编写一个 metro 应用程序,在用户开始输入时,焦点可以随时跳转到单个文本框。但我想不出如何在本地实现此功能,而不修改其他用户控件来检测按键按下并将焦点转移到文本框。 在 WinForms 中
在 VS Express 12 中重现的步骤: 创建一个新的 Windows 窗体应用程序项目 添加一个按钮 将表单 KeyPreview 设置为 true 向表单添加 keyDown 事件 只要按钮
我正在尝试扩展我的自定义 KeyboardView。有什么方法可以自定义 keyPreview 和 popUpKeyboard 外观而无需从头开始实现 KeyboardView 吗? 最佳答案 key
我有一个包含十几个按钮、单选按钮和只读编辑控件的 MFC 对话框。 我想知道用户何时在该对话框中按下 Ctrl+V,而不管哪个控件具有焦点。 如果这是 C#,我可以设置 KeyPreview 属性,我
我是一名优秀的程序员,十分优秀!