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

jsbrml 2012-11-30 11:36:43
WPF:richtextbox控件中,如果使用英文输入法,可以通过keydown事件的e.key这个属性获得输入的字母;但是,如果切换成汉字输入法之后,如何通过keydown事件获得按下的键盘是什么呢????
...全文
3242 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
愿丨安好 2014-07-15
  • 打赏
  • 举报
回复
如果是要判断字符串的合法性,建议用正则表达式!
Zhang_Yunan 2014-01-20
  • 打赏
  • 举报
回复
引用 6 楼 kxyzjm62 的回复:
可以考虑输入后马上删除
恩恩,对的。我最后就是用的这种折中的办法。 主要还是考虑到仅仅控制键盘按键是不够的。其实用户可以复制粘贴的啊。 到头来还得是在TextChanged事件处理函数中处理输入字符串。
kxyzjm62 2014-01-17
  • 打赏
  • 举报
回复
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication1 { /// <summary> /// Window1.xaml 的交互逻辑 /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Grid_KeyUp(object sender, KeyEventArgs e) { label1.Content = e.Key.ToString(); } } }
Zhang_Yunan 2014-01-17
  • 打赏
  • 举报
回复
对啊,同问,绑定。 WPF没有winform中的KeyPress事件。不能获得e.KeyChar. 因此输入法输入的都识别为Key.ImeProcessed。 怎么办有人有解决办法吗?
小猪八Q 2014-01-17
  • 打赏
  • 举报
回复
引用 5 楼 YUNAN_ZHANG 的回复:
[quote=引用 4 楼 kxyzjm62 的回复:] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication1 { /// <summary> /// Window1.xaml 的交互逻辑 /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Grid_KeyUp(object sender, KeyEventArgs e) { label1.Content = e.Key.ToString(); } } }
LS可能没明白我的意思。LS这样做确实可以得到经过输入法处理后e.Key的值。 但是在KeyUp中处理就不是我想要的了。 因为我的应用场景是这样的: 检测textBox中按下的键,如果为中文的冒号(:)则e.Handled==true;也就是禁止输入中文冒号。 但是如果按照LS这样处理,冒号还是输入进去了。而不能handled。 其实TextChanged事件、TextInput事件都可以获得冒号的键值,但是都是已经输入后才能得到。 问题是这并不是我想要的。 还有什么别的方法吗?[/quote] 亲,使用PreviewKeyUp事件,将e.Handled=true
kxyzjm62 2014-01-17
  • 打赏
  • 举报
回复
可以考虑输入后马上删除
Zhang_Yunan 2014-01-17
  • 打赏
  • 举报
回复
引用 4 楼 kxyzjm62 的回复:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication1 { /// <summary> /// Window1.xaml 的交互逻辑 /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Grid_KeyUp(object sender, KeyEventArgs e) { label1.Content = e.Key.ToString(); } } }
LS可能没明白我的意思。LS这样做确实可以得到经过输入法处理后e.Key的值。 但是在KeyUp中处理就不是我想要的了。 因为我的应用场景是这样的: 检测textBox中按下的键,如果为中文的冒号(:)则e.Handled==true;也就是禁止输入中文冒号。 但是如果按照LS这样处理,冒号还是输入进去了。而不能handled。 其实TextChanged事件、TextInput事件都可以获得冒号的键值,但是都是已经输入后才能得到。 问题是这并不是我想要的。 还有什么别的方法吗?
GrowUpInTheYouth 2013-12-10
  • 打赏
  • 举报
回复
楼主你不是一个人
jsbrml 2012-11-30
  • 打赏
  • 举报
回复
切换成中文输入法后,e.key就等于ImeProcessed了啊~

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧