0

我希望我在这里没有违反任何规则。我对另一篇文章有​​疑问,但我不是 stackoverflow 的大用户,所以我的声誉太低,无法对不属于我自己的问题或答案添加评论。

关于这个问题:如何比较两个富文本框内容并突出显示更改的字符?

TaW 提供了一些示例 C# 代码,我们在 Visual Studio 项目中使用了这些代码。但是,我们发现了一个问题,不知道如何解决。

如果 RTB1 包含文本“My name is David”,而 RTB2 包含文本“My name is”,则在运行比较后,diffs 集合中有两个差异,并且不知何故,当富文本框被重写以显示差异时, RTB1 与 RTB2 完全匹配,没有突出显示。也许这是预期的行为,我们只是没有意识到这一点,但我们希望 RTB1 中的文本“David”会被突出显示。

如果 RTB2 中的文本是“我的名字是”(在行尾添加了两个空格),那么我们会得到预期的行为。

我应该提到我们编写了一个与 TaW 的 C# 代码等效的 VB.NET 并且只是注意到了一个区别。我注意到评论中的差异。

如果我的声望达到 50,我还会在评论中补充说,我们非常感谢TaW分享他的示例,以及 DiffMatchPatch 的创建者。

4

1 回答 1

0

我想我们找到了问题所在。在我们的项目中,我们使用的是 vb.net,我们相当肯定我们正确地从 C# 转换为 VB。但是,在 C# 中的 collectChunks 函数中,您将 RTB 和 RTB2 作为对象进行比较,而不是对象中的文本属性。例如,当您比较 RTB 和 RTB2 时,即使要比较的两个文本框中的文本相等,您的代码也会比较对象及其所有其他相关属性,包括文本框位置。因此,第一个 == 总是错误的。

在 VB 中,我们不允许进行对象比较。即我们不允许使用RTB = RTB2,我们必须在if语句中使用RTB.Text = RTB2.Text。(有一种方法可以比较 VB 中的 RTB 对象,但我猜真正需要比较的是 RTB 和 RTB2 对象中的 text 属性)。如果是这种情况,您得到的结果是否可能是基于对文本框中的文本进行比较的假设?也许这个假设导致您按照您决定留在或跳出 for 循环的方式编写代码?

于 2015-05-21T17:45:56.557 回答