我目前正在开发一个非常简单的应用程序,在RichTextBox中使用非常基本的语法高亮显示。
它几乎没用。我正在做的是:
每个KeyUp事件都会触发此方法。它会造成很多闪烁。
所以我的问题是:我怎么能巧妙地突出显示我输入的文字而没有任何闪烁?这个编辑器永远不会包含数千行文本,可能大约有一百行,所以我还不需要任何非常优化的解决方案。
我尝试了其他帖子中提出的一些解决方案,但没有任何有趣的工作。而且我不想使用另一个库中的另一个组件 - 我想自己做这个用于学习目的。
答案 0 :(得分:2)
我这样做的方法是等待直到键入停止,然后进行一次突出显示。 这是基本逻辑:
使用每个keyup(或testchange等),设置“上次更改”时间,并排队后台任务(QueueUserWorkItem
)
在后台线程的WaitCallback
中,通过System.Threading.Thread.Sleep()
等待750毫秒。睡眠结束后,检查“上次更改”时间。它不到750ms之前?如果是这样,用户仍在打字,所以,......无事可做。退出方法。
如果上次更改时间超过750毫秒,则用户已停止输入。换句话说,在过去750毫秒的实时中没有发生任何变化。所以,突出显示。请记住,您需要在UI线程上进行UI更新。这意味着在应用格式之前,检查WinForms应用中的this.InvokeRequired
或WPF中的this.Dispatcher.CheckAccess()
。
答案 1 :(得分:0)
我决定尝试一下,它的效果令人惊讶!
我一次突出显示一行。因此,当keyUp被触发时,我只解析所选行。所以没有闪烁!
在创业时我创建了一个HighlightLines()方法,循环遍历这些方法并调用我的HighlightLine(lineIndex)方法。
我会尝试将我的解决方案与Cheeso混合使用,我猜它会让一些很棒的东西!
由于