首页 > 其他分享 >WPF RichTextBox 过滤中文不生效的问题

WPF RichTextBox 过滤中文不生效的问题

时间:2023-05-31 10:14:19浏览次数:39  
标签:OnPreviewTextInput RichTextBox 过滤 处理程序 WPF 文本 输入

WPF RichTextBox 过滤中文不生效的问题

1.问题

使用系统自带的OnPreviewTextInput事件,过滤用户输入时,可以在OnPreviewTextInput中利用e.Handled=true过滤英文和数字等的输入,但是无法过滤中文字符的录入。

2.解决方法

不使用系统的PreviewTextInput事件, 而是调用TextCompositionManager来重新注册AddPreviewTextInputStartHandler自定义事件处理。

 TextCompositionManager.AddPreviewTextInputStartHandler(this.AssociatedObject,new TextCompositionEventHandler(OnPreviewTextInput));

这行代码的作用是向 this.AssociatedObject 注册一个预览 TextInput 事件处理程序(即 OnPreviewTextInput 方法),以便在 RichTextBox 中输入文本之前拦截并处理此事件。

具体来说,TextCompositionManager.AddPreviewTextInputStartHandler 方法将在指定的元素上注册预览 TextInput 事件处理程序。注册此事件处理程序将允许您在输入文本之前执行某些操作,例如验证或格式化输入。

该方法需要两个参数:要在其上注册事件处理程序的元素和要处理事件的方法。在本例中,this.AssociatedObject 引用了 RichTextBox 控件,并将 OnPreviewTextInput 方法作为预览 TextInput 事件的处理程序。

以下是一个示例,它使用预览 TextInput 事件处理程序来限制用户只能输入数字和字母,并在输入到 RichTextBox之前将所有输入转换为小写字母:

private void OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
    // 只允许输入数字和字母
    if (!Regex.IsMatch(e.Text, @"^[a-zA-Z0-9]+$"))
    {
        e.Handled = true;
        return;
    }
    
    // 将所有输入转换为小写字母
    string inputText = e.Text.ToLower();
    
    // 在输入到 RichTextBox 之前,可以执行其他自定义操作...
    
    // 向 RichTextBox 插入文本
    TextRange range = new TextRange(richTextBox.Document.ContentEnd, richTextBox.Document.ContentEnd);
    range.Text = inputText;
    
    e.Handled = true;
}

在上述代码中,我们首先使用正则表达式来限制用户只能输入数字和字母。然后,我们将输入文本转换为小写字母,并在 RichTextBox 中插入文本之前执行其他自定义操作。最后,我们将 e.Handled 设置为 true,以便让 RichTextBox 控件忽略原始的输入文本。

标签:OnPreviewTextInput,RichTextBox,过滤,处理程序,WPF,文本,输入
From: https://www.cnblogs.com/dreamos/p/17445244.html

相关文章

  • 界面组件Telerik UI for WPF可轻松实现直方图,让数据可视化更简单
    TelerikUIforWPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UIforWPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成VisualStudio工具箱中。TelerikUIforWPF|下载试用TelerikUI......
  • python推荐系统实现(矩阵分解来协同过滤)|附代码数据
    原文链接:http://tecdat.cn/?p=10911最近我们被客户要求撰写关于推荐系统的研究报告,包括一些图形和统计输出。用户和产品的潜在特征编写推荐系统矩阵分解工作原理使用潜在表征来找到类似的产品 1.用户和产品的潜在特征我们可以通过为每个用户和每部电影分配属性,然后将它们相......
  • MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
    全文链接:http://tecdat.cn/?p=32594原文出处:拓端数据部落公众号在当今信息爆炸的时代,电影作为人们生活中不可或缺的娱乐方式,受到了越来越多的关注。而为了让观众能够更好地选择适合自己口味的电影,推荐系统成为了一个备受关注的研究领域。协同过滤算法是其中一种被广泛使用的方法......
  • java集合过滤出符合条件的List元素集合(lambda表达式)
    使用Java8中的lambda表达式过滤ModelMapmodel=newModelMap();TSmClazzTSmClazz=tSmClazzService.get(id);List<Student>students=TSmClazz.getStudents();if(flag.equals("0")){List<Student>boys......
  • WPF基础入门——绘画和动画(Draw&Animation)
    本篇文章学习于:刘铁猛老师《深入浅出WPF》XAML语言针对的是界面美化问题,可以让设计师直接加入开发团队、降低沟通成本。XAML的图形绘制功能非常强大,可以轻易绘制出复杂的图标、图画。WPF支持“滤镜”功能,可以像Photoshop那样为对象添加各种效果。WPF原生支持动画开发,无论是设......
  • Wpf基础入门——模板和样式(Template&Style)
    本篇文章学习于:刘铁猛老师《深入浅出WPF》什么是模板?在WPF中,通过引入模板(Template)微软将数据和算法的“内容”与“形式”解耦了。WPF中的Template分为两大类:ControlTemplate是算法内容的表现形式,一个控件怎样组织其内部结构才能让它更符合业务逻辑、让用户操作起来更舒服就......
  • WPF属性(依赖属性&附加属性)
    本篇文章学习于:刘铁猛老师《深入浅出WPF》什么是属性?属性又称为CLR属性(CLR,CommonLanguageRuntime)。我们既可以说CLR属性是private字段的安全访问包装,也可以说一个private字段在后台支持(back)一个CLR属性。classPerson{privatestringname;publicstringNam......
  • WPF事件(事件&路由事件)
    本篇文章学习于:刘铁猛老师《深入浅出WPF》WPF的树型结构路由(Route)一词的大意是这样:起点与终点间有若干个中转站,从起点出发后经过每个甲转站时要做出选择,最终以正确(比如最短或者最快)的路径到达终点。WPF把这种直接消息模型升级为可传递的消息模型——前面我们已经知道WPF......
  • WPF命令(Command)
    本篇文章学习于:刘铁猛老师《深入浅出WPF》命令是什么?你可能会问:“有了路由事件为什么还需要命令系统呢?”事件的作用是发布、传播一些消息,消息送达接收者,事件的使命也就完成了,至于如何响应事件送来的消息事件并不做规定,每个接收者可以使用自己的行为来响应事件。也就是说,事件......
  • Wpf基础入门——XAML篇
    本篇文章学习于:刘铁猛老师《深入浅出WPF》什么是“项目模板”?最简单的WPF程序App.xamlMainWindow.xamlMainWindows.cs浅析用户界面的树型结构示例:在XAML中为对象属性赋值Attribute=Value形式例如:【不能设置太复杂的值】可以注意到在xaml文件中设置的value都是str......