如何在 C# 中将所有 KeyPress 事件作为 UserControl 获取?

2023-12-20

我现在已经阅读了一些有关按键事件的文章,但我不知道如何获取它们。我知道只有当前具有键盘焦点的控件才能获取按下事件。但我如何确保我的用户控件拥有它?

尝试过这个但没有运气:

public partial class Editor : UserControl

this.SetStyle(ControlStyles.Selectable, true);
this.TabStop = true;
...
//take focus on click
protected override void OnMouseDown(MouseEventArgs e)
{
    this.Focus();
    base.OnMouseDown(e);
}
...
protected override bool IsInputKey(Keys keyData)
{
   return true;
}

还有这个:

//register global keyboard event handlers
private void Editor_ParentChanged(object sender, EventArgs e)
{
    if (TopLevelControl is Form)
    {
        (TopLevelControl as Form).KeyPreview = true;
        TopLevelControl.KeyDown += FCanvas_KeyDown;
        TopLevelControl.KeyUp += FCanvas_KeyUp;
        TopLevelControl.KeyPress += FCanvas_KeyPress;
    }
}

后者给了我按键按下和按键向上事件,但仍然没有按键。当我的控件继承自 UserControl 时,是否有任何其他方法可以用来获取每个向下/向上/按下事件?

编辑: 正如有一条评论链接了另一个 SO 问题:重要的是我还获得了 KeyPress 事件,因为无论哪种语言,它都会在每个键盘上发送正确的字符。这对于文本写作很重要。如果您只获得单个密钥,则必须自行将它们处理为正确的字符。但也许有一种方便的方法可以将按下的按键转换为本地化字符?


  • 设置您的父表单(包含用户控件)KeyPreview财产给true
  • 添加新的KeyPress向您的家长表格发送事件

设置父窗体按键事件以将事件转发到您的用户控件:

private void parentForm_KeyPress(object sender, KeyPressEventArgs e)
        {
            // Forward the sender and arguments to your usercontrol's method
            this.yourUserControl.yourUserControl_KeyPress(sender, e);
        }

更换yourUserControl1_KeyPress方法与您自己的方法,您希望在每次用户按下按钮(按下按钮然后释放)时运行该方法。

您还可以为用户控件创建一个新的 KeyPress 处理程序,并在那里转发发送者和 KeyPressEventArgs 对象,如本例所示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中将所有 KeyPress 事件作为 UserControl 获取? 的相关文章

  • 使用索引避免迭代器失效,维护干净的接口

    我创建了一个MemoryManager
  • 运行时两个注册之间的简单注入器基于动态上下文的注入

    我有一个使用 Simple Injector 进行命令处理程序注册的中介应用程序 并且注入和处理程序均已设置并完美运行 class DoWashingCommandHandler IRequestHandler
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 在 Windows 服务中使用 OleDb 从 Excel 读取数据?

    免责声明 我知道这是一种不好的做事方式 这是我们与客户的唯一选择 Problem 我们需要每隔 x 时间从 Excel 文件读取数据 数据通过第三方 Excel 插件不断变化 应用程序的环境是 Windows XP SP1 和 Net 2
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • 剥离 OLE 标头信息 (MS Access / SQL Server)

    我有一个 C 应用程序需要支持二进制数据库内容 图像等 当使用 MS Access 或 MS SQL Server 时 此数据被包装在 OLE 对象内 如何去除此 OLE 标头信息 请注意 我不能只查找特定标签的开头 因为内容可以是 png
  • 简单的喷射器将具体类型与生活方式结合起来

    我正在寻找一种可以使用指定的生活方式注册具体类型的方法 基本上如下所示 public void SomeFunction Type concrete Lifestyle lifestyle gt container Register con
  • 链接错误:xxx 已在 *****.LIB 中定义:: 究竟出了什么问题?

    Problem 我正在尝试使用一个名为DCMTK http dicom offis de dcmtk它使用了一些其他外部库 zlib libtiff libpng libxml2 libiconv 我已经从同一网站下载了这些外部库 LIB
  • 防止单个可执行文件的多个进程实例

    我正在使用 NET 和 C 我想阻止同一可执行文件的两个实例同时运行 但我不想阻止从另一个文件夹运行的同一进程 例如 我有一个位于两个不同位置的可执行文件 C MyProject Master Program exe C MyProject
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • 64 位随机生成器种子

    我目前正在运行一个具有 8 个以上管道 线程 的多线程模拟应用程序 这些管道运行非常复杂的代码 该代码取决于种子生成的随机序列 然后该序列被归结为单个 0 1 我希望在将种子从主线程传递到处理管道后 这种 随机处理 具有 100 的确定性

随机推荐

  • 如何使用 Python 从 Windows 7 中迭代连接的 iPhone 上的照片?

    当我将 iPhone 连接到 Windows 7 系统时 Windows 资源管理器会打开 DCIM 内容的虚拟文件夹 我可以通过 Pywin32 218 访问 shell 库接口 如下所述 我可以在 python 中使用库抽象吗 http
  • 需要配置的打字稿

    我正在构建一个 Web 应用程序 其中的开发不是基于 TypeScript 构建的 但是该应用程序具有我想要使用插件样式进行的集成点 这就是使用 TypeScript 的地方 TypeScript 代码位于第二个解决方案中 我将 js 文件
  • git status 报告新克隆的存储库中修改的文件

    Solved 远程存储库似乎包含两个名称相同的文件 除了第一个字母之外 这导致我的系统上的文件被覆盖 从而导致以下问题 Update 看起来它与换行符无关 但我还找不到解释 事情是这样的 git status报告FileStartingWi
  • 获取在 Windows 上构建轮错误 Pygame 的要求

    我正在尝试使用以下命令安装 Pygame pip install pygame我得到这个结果 pip 安装 pygame 收集pygame 使用缓存的 pygame 2 4 0 tar gz 13 2 MB 安装构建依赖项 完成 获取构建轮
  • 服务结构具有 100 万个键的可靠字典性能

    我正在使用包含约 100 万个键的可靠字典来评估 Service Fabric 的性能 我得到的结果相当令人失望 所以我想检查我的代码或我的期望是否错误 我有一本初始化的字典dict await stateManager GetOrAddA
  • jQuery.post 刷新我的页面?

    我的页面上有以下带有表单的代码 但是当我点击提交时 我的页面似乎刷新了 form
  • js如何将objectName打印到控制台

    使用 webdev 工具控制台时 如果输入浏览器对象 则会返回控制台 gt console Console gt console object Console gt console log console undefined gt Cons
  • rm 无法从脚本中通过通配符删除文件,但可以在 shell 提示符下工作

    我在 Linux shell 脚本中遇到了一个非常愚蠢的问题 我想删除目录中扩展名为 bz2 的所有文件 在我调用的脚本中 rm archivedir bz2 其中 archivedir 是目录路径 应该很简单 不是吗 不知何故 它因以下错
  • [iOS][AWS Cognito] 已弃用“登录”:使用“AWSIdentityProviderManager”

    我一直在尝试使用 Amazon Cognito 在 iOS 上使用 Facebook 和 Twitter 对用户进行身份验证 我无法实施 因为官方文件太旧了 这是我的代码 NSString token FBSDKAccessToken cu
  • 使用 Python 和 mySQL 进行动态 SQL 查询

    我有多个表 这些表在网格中的值更改后更新 这些表并不总是具有相同的键或列 因此我无法明确命名列或格式 唯一相同的是键所在的列 我知道我目前这样做的方式是不正确的 并且使我容易受到注入攻击 我还遇到了一个问题 其中某些值包含在 SQL 语句中
  • jQuery 滑块适用于 div 元素而不仅仅是图像

    我已经在我正在处理的页面底部为一些 建议项目 创建了 div 和容器 希望它成为一个滑块 您可以在其中左右单击以查看更多内容 但是我见过的所有 jQuery 滑块都只适用于图像 轮播 对于这种情况 人们可以向我推荐一些滑块 因为它不仅仅是图
  • MySQL 从多列中选择并计算值

    我正在尝试创建一个 mysql 选择查询 该查询根据其他两个字段计算一个值 这是我的查询 SELECT request id unit cost quantity AS claim value FROM xx non part usage
  • 如何判断 Clojure 中的 dosync 是否正在更新引用?

    我需要对参考进行一些更新 但我想选择在参考不大量使用时执行更新的时间 有没有一种方法可以以编程方式判断引用何时处于事务中 你可以add watch http clojure github com clojure clojure core a
  • SVG 与 HTML5 Canvas 中的图表

    我想开始一个项目 在该项目中 我需要绘制由用线条连接的圆角矩形组成的图表 以及单击某些元素时的 JavaScript 操作 这需要在所有现代浏览器中工作 SVG 和 HTML5 Canvas 似乎都可以做到这一点 所以我想知道什么是最好的
  • SimpleXml 存在命名空间问题

    我几乎尝试了所有方法 但我似乎无法从以下 SimpleXMLElement 转储中读取命名空间 m inline 元素以及 feed 和 title 子元素 SimpleXMLElement 235 attributes array 4 r
  • 在 python 中使用正则表达式进行搜索和替换

    str name John company AB C corp id 12g 123 12 12 B C替换为空字符串 g 1替换为空字符串 必填字符串 str name John company A corp id 1223 12 12
  • 在 Intellij 中使用 springloaded 重新加载类后断点不起作用

    我正在 Intellij 中使用 应用程序 配置运行我的 java 应用程序 我正在使用这些 vm 选项来使用 springloaded javaagent springloaded 1 2 0 RELEASE jar noverify 使
  • 将迁移作为 Django Web 应用程序的 MS Azure 应用程序服务发布管道的一部分运行

    我想知道是否有人有集成的经验python manage py migrate命令进入 MS Azure 发布管道 该应用程序正在通过 DevOps 使用 CI CD 管道进行部署 在发布管道部分 应用程序被部署到三个不同的阶段 开发 测试和
  • 泛型类的 Swift 委托协议

    我有一堂课 StateMachine 这是通用的 允许将不同的状态集实现为例如枚举 我想用一个StateMachineDelegate当状态机进入新状态时通知委托的协议 但这不起作用 因为委托协议对于类型要求也是通用的 该错误显示了哪里de
  • 如何在 C# 中将所有 KeyPress 事件作为 UserControl 获取?

    我现在已经阅读了一些有关按键事件的文章 但我不知道如何获取它们 我知道只有当前具有键盘焦点的控件才能获取按下事件 但我如何确保我的用户控件拥有它 尝试过这个但没有运气 public partial class Editor UserCont