• WPF 捕获键盘输入事件


    最近修改的一个需求要求捕获键盘输入的 Text,包括各种标点符号。

    最开始想到的是 PreviewKeyDown 或者 PreviewKeyUp 这样的键盘事件。

    但是这两个事件的对象 KeyEventArgs 不够用,得依靠判断 Key 来判断输入了什么,然后再根据判断写死一个相应键位的 Text 来获取数据。

    如组合键获取 乘号键 需要用到 Shift + 8(数字键盘那的乘号键是 Key.Multiply ,而需要在主键盘位获取则需要用到组合键)

    1 private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    2 {
    3    if(e.KeyStates == Keyboard.GetKeyStates(Key.D8) && Keyboard.Modifiers == ModifierKeys.Shift)
    4    {
    5        var input = "*";
    6    }
    7 }

    这种办法既不友好且需要用到其他标点符号时还得另外加 if 条件,而且会发生 Key 冲突的问题,如上你输入完 乘号键 以后可能还会多加一个“8”,由于 Key.D8 的原因

    随后花了点时间找了下国外博客,然后发现了这个文章(引用1),其实文章内的解决方案博客园也能找到几篇,但是不详细一笔带过。

    这是我根据文章内写的代码

    XAML:

    1 <Window x:Class="Dome.MainWindow"
    2     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4     PreviewTextInput="Window_PreviewTextInput"
    5     Height="400" 
    6     Width="600"
    7     MinWidth="600">
    8 </Window>

    C#:

    1 private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
    2 {
    3    var input = e.Text;
    4 }

    引用

    http://stackoverflow.com/questions/2924928/wpf-previewkeydown-event-and-underscore-char

    总结

    关于PreviewKeyDown和KeyDown的区别园区里也有很多相关的文章,以后我也将会写一个,毕竟我也碰到过这个坑...

  • 相关阅读:
    vue 路由跳转返回上一级
    js中Let和Var的区别
    JS实现电话号码校验座机:区号号码、或11位手机号
    VUE 监听 对象属性值变化的三种方式
    vue中computed的用法
    elementUI中input输入框,强制输入数字,并限制输入长度
    C++中__int64用法
    WIN10计算器设计可能出现的坑
    跳转acticity
    asp.net邮件发送
  • 原文地址:https://www.cnblogs.com/SunsetAzure/p/6227864.html
Copyright © 2020-2023  润新知