wpf 如何用keydown事件获得键盘输入的字符

问题描述

WPF:richtextbox控件中,如果使用英文输入法,可以通过keydown事件的e.key这个属性获得输入的字母;但是,如果切换成汉字输入法之后,如何通过keydown事件获得按下的键盘是什么呢????

解决方案

解决方案二:
切换成中文输入法后,e.key就等于ImeProcessed了啊~
解决方案三:
楼主你不是一个人
解决方案四:
对啊,同问,绑定。WPF没有winform中的KeyPress事件。不能获得e.KeyChar.因此输入法输入的都识别为Key.ImeProcessed。怎么办有人有解决办法吗?
解决方案五:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;namespaceWpfApplication1{///<summary>///Window1.xaml的交互逻辑///</summary>publicpartialclassWindow1:Window{publicWindow1(){InitializeComponent();}privatevoidGrid_KeyUp(objectsender,KeyEventArgse){label1.Content=e.Key.ToString();}}}
解决方案六:
引用4楼kxyzjm62的回复:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;namespaceWpfApplication1{///<summary>///Window1.xaml的交互逻辑///</summary>publicpartialclassWindow1:Window{publicWindow1(){InitializeComponent();}privatevoidGrid_KeyUp(objectsender,KeyEventArgse){label1.Content=e.Key.ToString();}}}

LS可能没明白我的意思。LS这样做确实可以得到经过输入法处理后e.Key的值。但是在KeyUp中处理就不是我想要的了。因为我的应用场景是这样的:检测textBox中按下的键,如果为中文的冒号(:)则e.Handled==true;也就是禁止输入中文冒号。但是如果按照LS这样处理,冒号还是输入进去了。而不能handled。其实TextChanged事件、TextInput事件都可以获得冒号的键值,但是都是已经输入后才能得到。问题是这并不是我想要的。还有什么别的方法吗?
解决方案七:
可以考虑输入后马上删除
解决方案八:
引用5楼YUNAN_ZHANG的回复:

Quote: 引用4楼kxyzjm62的回复:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;namespaceWpfApplication1{///<summary>///Window1.xaml的交互逻辑///</summary>publicpartialclassWindow1:Window{publicWindow1(){InitializeComponent();}privatevoidGrid_KeyUp(objectsender,KeyEventArgse){label1.Content=e.Key.ToString();}}}

LS可能没明白我的意思。LS这样做确实可以得到经过输入法处理后e.Key的值。但是在KeyUp中处理就不是我想要的了。因为我的应用场景是这样的:检测textBox中按下的键,如果为中文的冒号(:)则e.Handled==true;也就是禁止输入中文冒号。但是如果按照LS这样处理,冒号还是输入进去了。而不能handled。其实TextChanged事件、TextInput事件都可以获得冒号的键值,但是都是已经输入后才能得到。问题是这并不是我想要的。还有什么别的方法吗?

亲,使用PreviewKeyUp事件,将e.Handled=true
解决方案九:
引用6楼kxyzjm62的回复:

可以考虑输入后马上删除

恩恩,对的。我最后就是用的这种折中的办法。主要还是考虑到仅仅控制键盘按键是不够的。其实用户可以复制粘贴的啊。到头来还得是在TextChanged事件处理函数中处理输入字符串。
解决方案十:
如果是要判断字符串的合法性,建议用正则表达式!

时间: 2024-11-17 09:00:34

wpf 如何用keydown事件获得键盘输入的字符的相关文章

利用Keydown事件阻止用户输入实现代码

 这篇文章主要介绍了利用Keydown事件阻止用户输入的具体实现,需要的朋友可以参考下 先了解下各事件的区别    KeyDown:在控件有焦点的情况下按下键时发生  KeyPress:在控件有焦点的情况下按下键时发生  KeyUp: 在控件有焦点的情况下释放键时发生    1.KeyPress主要用来接收字母.数字等ANSI字符.KeyDown 和 KeyUP 事件过程通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键    2.KeyPress 只能捕获单个字符,KeyDo

从键盘输入一个字符如(“12345”只有0-9)用递归算法将字符串转换为数字,

问题描述 从键盘输入一个字符如("12345"只有0-9)用递归算法将字符串转换为数字, 完整题目:从键盘输入一个字符如("12345"只有0-9)用递归算法将字符串转换为数字,求算法复杂性,并验证排序正确性 解决方案 不好意思,之前发的那个没验证发现有点问题,误导了,这个验证了一下没问题.你的题目总没有说明翻译成几进制,所以我就按原样翻译了 例如字符"1234",翻译为数字1234. void GetNumFromString(char *c,

java-如何从键盘输入一个字符,赋给一个char型变量

问题描述 如何从键盘输入一个字符,赋给一个char型变量 这是老师的附加题,java里的求解求解求解求解求解求解求解求解求解 解决方案 方法一:从控制台接收一个字符,然后将其打印出来 public static void main(String [] args) throws IOException{ System.out.print("Enter a Char:"); char i = (char) System.in.read(); System.out.println("

如何从键盘输入一个字符?

问题描述 同题,如何从键盘输入一个字符.是字符,不是字符串. 解决方案 解决方案二:charc=(char)System.in.read();解决方案三:确保每次都输入时,可以使用Scannersc=newScanner(System.in);charc=sc.next().charAt(0);System.out.println(c); 解决方案四:这个简单..

利用Keydown事件阻止用户输入实现代码_javascript技巧

先了解下各事件的区别 KeyDown:在控件有焦点的情况下按下键时发生 KeyPress:在控件有焦点的情况下按下键时发生 KeyUp: 在控件有焦点的情况下释放键时发生 1.KeyPress主要用来接收字母.数字等ANSI字符.KeyDown 和 KeyUP 事件过程通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键 2.KeyPress 只能捕获单个字符,KeyDown 和KeyUp 可以捕获组合键. 3.KeyPress 不显示键盘的物理状态(SHIFT键),而只是传递一

键盘输入的字符和显示的字符不一样

  键盘使用一直正常,不知为何突然在键盘上输入某个字符后,在屏幕上显示的却是另一个字符.比如输入的是"F",显示的确实"J". 这种问题可能是由于电路板上有短路现象造成的,出现这种问题主要表现是按一个键显示的为同一列的其他字符.这时用户可以用万用表或者波器进行测量,检测到故障点后,进行修复就可以恢复正常.

jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)_jquery

键盘事件处理所有用户在键盘敲击的情况,不管在文本输入区域内部还是外部.键盘事件在不同的浏览器中作用的范围是不一样的,通常这种键盘事件可以作用于 Form元素,a标签元素,window ,document这样的元素上.在所有可以获得交点的元素上是可以触发键盘事件的,可以获得焦点的元素可以这样理解,在使用Tab键的时候可以跳跃到的元素就是可以使用键盘事件的元(在没有为这些元素设置tabindex属性值的情况下,当tabindex设置为负数的时候,在使用Tab键的时候就不会获得焦点).     键盘事

Java中接收键盘输入的三种方法_java

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 CharTest(); //调用System.in方法 ReadTest(); //调用ReadTest方法 Scan

WPF and Silverlight学习笔记(十四):键盘输入、鼠标输入、焦点处理

一.键盘类和键盘事件 WPF提供了基础的键盘类 (System.Input.Keyboard类),该类提供与键盘相关的事件.方法和属性,这 些事件.方法和属性提供有关键盘状态的信息.Keyboard的事件也通过 UIElement等XAML基元素类的事件向外提供. 对于键盘操作,其常用的事 件有两组: KeyDown事件和PreviewKeyDown事件:处理键盘键按下 KeyUp事件和PreviewKeyUp事件:处理键盘键抬起 其中KeyDown和 KeyUp事件属于冒泡路由事件,而Prev