vb.net的高效,无闪烁语法高级语言,与IDE中的语法一样有效

时间:2009-10-14 16:26:18

标签: vb.net richtextbox syntax-highlighting

虽然我知道上述目标很难实现,但我知道可以做到。

我做的是什么:

它将每个单词与列表中的单词进行比较,如果匹配,它将物理地选择文本并更改颜色,最后它会将克拉返回到突出显示时的位置。

问题:

  • 闪烁。它总是闪烁着。我设法通过使线程休眠50毫秒来减少闪烁,但我无法完全摆脱它(它没有显着减慢键入速度)。现在,我尝试的另一件事是使用第二个RichTextBox来突出显示,但这根本没有明显的区别。

  • 滚动。如果文本量足以导致滚动条出现,它将滚动RichTextBox。

  • 删除文字。如果删除已突出显示的单词的一部分,即使该单词现在已更改,它也会保留颜色格式。它还会在物理上选择整个单词,这让我无休止地感到困惑。

  • 关闭窗口。由于每当调用RichTextBox的TextChanged事件时都会调用highlight子例程,显然它会在窗口关闭时被触发?但是,由于窗口正在关闭,因此会降低整个过程的速度,因此对于较大的文件,可能需要5-10秒才能完成并突出显示每个关键字。

我如何解决这些问题?我不想使用其他人的组件,我特别想使用我自己的组件。

感谢您的帮助,我花了几个小时的时间,到目前为止,我对结果感到满意。

我有过一些想法:

  • 物理编辑RTF而不是使用内置方法来更改文本颜色,这将解决我的所有问题。假设一个关键字是“The”(例如),那么rtf会变成蓝色是什么?

  • 请勿使用语法高亮显示(此处为最后手段)

我的最终目标:RichTextBox的语法高亮显示器,与Visual Studio中的一样。

编辑:还有另一个组件比RichTextBox更好吗?

5 个答案:

答案 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(