积极答复者
拦截RichTextBox控件TextChanged事件

问题
-
各位好,以下语句
RichTextBox.[Select](intStart, intEnd - intStart)
RichTextBox.SelectionBackColor = 背景色
RichTextBox.SelectionColor = 普通字颜色
不知道怎么回事会进入RichTextBox控件的TextChanged消息,当单步运行时,执行完,RichTextBox.[Select](intStart, intEnd - intStart)这条选择文字时
再执行RichTextBox.SelectionBackColor = 背景色和RichTextBox.SelectionColor = 普通字颜色
2条语句都会进入TextChanged,每次进入TextChanged事件,控件就会自动增加一个撤销的动作
会导致撤销功能的混乱,当去掉RichTextBox.[Select](intStart, intEnd - intStart)这条选择文字,程序正常
所以我想再系统接收到TextChanged事件前拦截,然后根据标志,选择让不让系统继续处理TextChanged.
或者RichTextBox控件有无关闭自动撤销和恢复的功能,程序跟使用的net版本无关
答案
-
兄弟可以了,谢谢,加句,把自定义的控件,继承自RichTextBox,就可以了,非常感谢,这个问题我搞了,3天终于好了
- 已建议为答案 ThankfulHeartModerator 2013年1月6日 4:37
- 已标记为答案 Mike FengModerator 2013年1月7日 11:48
全部回复
-
或者哪位知道TextChanged是对应的一下的哪个消息,我想系统的钩子
Public Const WH_CALLWNDPROC = 4 '发给窗口的消息.线程或系统
Public Const WH_CALLWNDPROCRET = 12 '窗口返回的消息.线程或系统
Public Const WH_CBT = 5 '窗口变化、焦点设定等消息.线程或系统
Public Const WH_DEBUG = 9 '是否执行其它hook的hook.线程或系统
Public Const WH_FOREGROUNDIDLE = 11 '前台程序空闲 .线程或系统
Public Const WH_GETMESSAGE = 3 '投放至消息队列中的消线程或系统
Public Const WH_HARDWARE = 8
Public Const WH_JOURNALPLAYBACK = 1 '将所记载的消息进行回放系统
Public Const WH_JOURNALRECORD = 0 '监视并记录输入消息系统
Public Const WH_KEYBOARD = 2 '键盘消息.线程或系统
Public Const WH_KEYBOARD_LL = 13
Public Const WH_MOUSE = 7 '鼠标消息.线程或系统
Public Const WH_MOUSE_LL = 14
Public Const WH_MSGFILTER = (-1) '菜单滚动条、对话框消息.线程或系统
Public Const WH_SHELL = 10 '外壳程序的消息.线程或系统
Public Const WH_SYSMSGFILTER = 6 '所有线程的菜单滚动条、对话框消息系统- 已编辑 racenjian 2013年1月5日 12:53 文字输入位置错误和增加文字
-
@所以我想再系统接收到TextChanged事件前拦截,然后根据标志,选择让不让系统继续处理TextChanged.
RichTextBox继承了TextBoxBase,而TextBoxBase重写了OnTextChanged方法。因此除非你重写这个类,方可去除TextBoxChanged事件。
protected override void OnTextChanged(EventArgs e) { CommonProperties.xClearPreferredSizeCache(this); base.OnTextChanged(e); }
尝试注释掉base……这一句。或者自行处理代码。
帮助一起改进论坛质量?提交你的意见于此。
我的博客园
慈善点击,点击此处
和谐拯救危机,全集下载,净化人心
- 已编辑 ThankfulHeartModerator 2013年1月5日 13:11
-
兄弟可以了,谢谢,加句,把自定义的控件,继承自RichTextBox,就可以了,非常感谢,这个问题我搞了,3天终于好了
- 已建议为答案 ThankfulHeartModerator 2013年1月6日 4:37
- 已标记为答案 Mike FengModerator 2013年1月7日 11:48