虽然我知道上述目标很难实现,但我知道可以做到。
我做的是什么:
它将每个单词与列表中的单词进行比较,如果匹配,它将物理地选择文本并更改颜色,最后它会将克拉返回到突出显示时的位置。
问题:
闪烁。它总是闪烁着。我设法通过使线程休眠50毫秒来减少闪烁,但我无法完全摆脱它(它没有显着减慢键入速度)。现在,我尝试的另一件事是使用第二个RichTextBox来突出显示,但这根本没有明显的区别。
滚动。如果文本量足以导致滚动条出现,它将滚动RichTextBox。
删除文字。如果删除已突出显示的单词的一部分,即使该单词现在已更改,它也会保留颜色格式。它还会在物理上选择整个单词,这让我无休止地感到困惑。
关闭窗口。由于每当调用RichTextBox的TextChanged事件时都会调用highlight子例程,显然它会在窗口关闭时被触发?但是,由于窗口正在关闭,因此会降低整个过程的速度,因此对于较大的文件,可能需要5-10秒才能完成并突出显示每个关键字。
我如何解决这些问题?我不想使用其他人的组件,我特别想使用我自己的组件。
感谢您的帮助,我花了几个小时的时间,到目前为止,我对结果感到满意。
我有过一些想法:
物理编辑RTF而不是使用内置方法来更改文本颜色,这将解决我的所有问题。假设一个关键字是“The”(例如),那么rtf会变成蓝色是什么?
请勿使用语法高亮显示(此处为最后手段)
我的最终目标:RichTextBox的语法高亮显示器,与Visual Studio中的一样。
编辑:还有另一个组件比RichTextBox更好吗?答案 0 :(得分:2)
我不知道你是否在这里使用Windows.Forms或WPF,但如果它是Windows.Forms,我几年前写了一篇关于这个问题的博客文章,它可能适用于你。我这样做是为了聊天程序而且对我来说效果很好。 Blog post is here.
答案 1 :(得分:1)
我刚刚看到this page处理使用RichTextBox进行语法突出显示但是在C#中。然而,问题是second post谈到了你的闪烁,我不确定他们的解决方案是否对你有帮助。并且看起来每次文本更改时他们都会重新检查突出显示,这可以解决您的问题,即使更改了单词仍然突出显示。
关于Real Time Syntax Highlighting with Visual Basic的CodeProject还有一篇非常详尽的文章,绝对值得一读。
至于组件,this question涵盖了这些。
对不起,如果我误解了你。
答案 2 :(得分:0)
您可能需要查看Sharp Develop的源代码,它们的编辑器功能齐全且高亮显示没有闪烁。
另外,如果你能掌握一本名为“解剖C#应用程序 - 内部夏普开发”的书,那里有几章致力于编辑 - 数据结构,突出显示,ui
答案 3 :(得分:0)
Scintilla,它是免费和开源的。它支持许多语言并且易于使用。它是Visual Studio的实时语法高亮显示附加组件,几乎不需要任何代码即可运行,它还有600个工具可用于制作预IDE,因此它是一个很好的附加组件,可以完全编辑。
答案 4 :(得分:0)
如果richtextbox没有焦点,它就不会闪烁。 我通过移除焦点暂时解决了它,然后再次设置它,如果它在
之前被聚焦Dim lWasIFocused As Boolean = Me.Focused
' Removes flicker when i am not focused
Parent.Focus()
' enter your code here
If lWasIFocused Then Me.Focus(