栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在C#中以编程方式生成按键事件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在C#中以编程方式生成按键事件?

该问题被标记为WPF,但到目前为止的答案是特定的WinForms和Win32。

要在WPF中执行此操作,只需构造一个KeyEventArgs并在目标上调用RaiseEvent。例如,要将Insert key
KeyDown事件发送到当前关注的元素:

  var key = Key.Insert;         // Key to send  var target = Keyboard.FocusedElement;    // Target element  var routedEvent = Keyboard.KeyDownEvent; // Event to send  target.RaiseEvent(    new KeyEventArgs(      Keyboard.PrimaryDevice,      PresentationSource.FromVisual(target),      0,      key)    { RoutedEvent=routedEvent }  );

该解决方案不依赖于本地调用或Windows内部,应该比其他解决方案更可靠。它还允许您模拟特定元素上的按键。

请注意,此代码仅适用于PreviewKeyDown,KeyDown,PreviewKeyUp和KeyUp事件。如果要发送TextInput事件,则可以执行以下操作:

  var text = "Hello";  var target = Keyboard.FocusedElement;  var routedEvent = TextCompositionManager.TextInputEvent;  target.RaiseEvent(    new TextCompositionEventArgs(      InputManager.Current.PrimaryKeyboardDevice,      new TextComposition(InputManager.Current, target, text))    { RoutedEvent = routedEvent }  );

另请注意:

  • 控件希望接收预览事件,例如PreviewKeyDown应该在KeyDown之前

  • 使用target.RaiseEvent(…)将事件直接发送到目标,而无需诸如加速器,文本合成和IME之类的元处理。这通常是您想要的。另一方面,如果出于某种原因确实执行了模拟实际键盘按键的操作,则应改用InputManager.ProcessInput()。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号