C# 自定义文本编辑器控件中 中文重复出现问题

本文档描述了在C#自定义文本编辑器控件中遇到的中文字符重复显示的问题,分析了WM_IME_CHAR和WM_CHAR事件的影响,并提供了通过开关标记解决的方案,以确保仅正确显示输入的中文字符。
摘要由CSDN通过智能技术生成

毕设时做的一个代码编辑器,基于开源项目Fireball(http://www.codeplex.com/dotnetfireball)。在其中实现了语法加亮,括号匹配等通用代码编辑器的基础上,添加了基于DLL文件的智能提示功能。不过随后发现当输入中文的时候,在代码编辑器中会重复出现输入的中文。

最近,当时的老师让修改一下这个bug,追踪代码中的事件处理,发现当输入中文的时候有两个事件WM_IME_CHAR 和 WM_CHAR 的参数中都有输入的中文字符,并且每个事件都触发了OnKeyPress事件。而正是在OnKeyPress中将该事件中的字符显示在屏幕上。

本来想直接忽略WM_IME_CHAR事件,可是好像它对后续的WM_CHAR事件有影响,导致所有字符都不显示。由于输入英文的时候只有WM_CHAR事件,因此不能忽略该事件。

鉴于此,最后采用开关标记的方法来实现。在WndProc函数中根据事件来修改开关标记。在OnKeyPress中根据开关标记来决定是否输出。

Source Code:http://www.rayfile.com/files/f3b887e3-c1fa-11dd-a3aa-0014221b798a/

Original Report:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值