为了账号安全,请及时绑定邮箱和手机立即绑定

RichTextBox语法实时突出显示 - 禁用重绘

RichTextBox语法实时突出显示 - 禁用重绘

C#
MMTTMM 2019-08-28 15:12:33
RichTextBox语法实时突出显示 - 禁用重绘我正在创建一个带有RichTextBox的函数,并且可以访问关键字列表和'badwords'。我需要突出显示我在用户输入时在RichTextBox中找到的任何关键字和坏词,这意味着每次发布编辑键时都会调用该函数。我写过这个函数,但是框中的文字和光标闪烁得太过舒适。我发现了一个解决方案 - 在我编辑和格式化文本时禁用RichTextBox重绘自身的能力。但是,我知道这样做的唯一方法是覆盖“WndProc”函数并拦截(我将要收集的内容)重绘消息如下:protected override void WndProc(ref System.Windows.Forms.Message m){     if (m.Msg == 0x00f) {          if (paint)             base.WndProc(ref m);          else             m.Result = IntPtr.Zero;     }     else          base.WndProc(ref m);}布尔突出'paint'在我开始突出显示之前设置为false,在我完成时设置为true。但正如我所说,我制作的函数必须采用RichTextBox; 我不能使用子类。那么,有没有办法禁止从外部自动重新绘制RichTextBox?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

完成您要完成的任务的最佳选择是创建多线程应用程序。您将需要创建一个线程来检查列表中的文本。该线程将它找到的任何实例放入队列中。您还需要创建另一个执行单词实际突出显示的线程。因为您需要使用BeginInvoke()和Invoke()来更新UI,所以您需要确保调整调用它的速率。我每秒不超过20次。为此,您可以使用以下代码:

DateTime lastInvoke=DateTime.Now;if ((DateTime.Now - lastInvoke).TotalMilliseconds >=42){
    lastInvoke=DateTime.Now;
    ...Do your highlighting here...}

此线程将检查您的队列中是否需要突出显示或重新突出显示的单词,并将不断检查队列中是否有任何新更新。希望这是有道理的!


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 583 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信