我希望我不违反任何规则。我对另一篇文章有疑问,但我不是stackoverflow的大用户,所以我的声誉太低,无法对我自己的问题或答案添加评论。
关于这个问题:How to compare two rich text box contents and highlight the characters that are changed?
TaW提供了一些示例C#代码,我们在Visual Studio项目中使用了它。但是,我们发现了一个问题,并且不知道如何修复它。
如果RTB1包含文本“我的名字是大卫”而RTB2包含文本“我的名字是”,那么在比较运行后,差异集合中有两个差异,不知何故,当富文本框被重写为显示差异,RTB1是RTB2的精确匹配,没有突出显示。也许这是预期的行为,我们只是没有意识到这一点,但我们希望突出显示RTB1中的“David”文本。
如果RTB2中的文本是“我的名字是”(在行的末尾添加两个空格),那么我们得到预期的行为。
我应该提到我们写了一个类似于TaW的C#代码的VB.NET,并且注意到了一些区别。我已经注意到评论中的差异。
如果我的声望高达50,我还会在评论中补充说,我们非常感谢TaW分享他的榜样,以及DiffMatchPatch的创建者。
答案 0 :(得分:0)
我想我们找出了问题所在。在我们的项目中,我们使用vb.net,我们相当确定我们正确地从C#转换为VB。但是在C#中的collectChunks函数中,您将RTB和RTB2作为对象进行比较,而不是对象中的text属性。因此,例如,当您比较RTB和RTB2时,即使被比较的两个文本框中的文本相等,您的代码也会比较对象及其所有其他相关属性,包括文本框位置。因此,第一个==总是假的。
在VB中,我们不允许进行对象比较。即我们不允许使用RTB = RTB2,我们必须在if语句中使用RTB.Text = RTB2.Text。 (有一种方法可以比较VB中的RTB对象,但我猜测真正需要比较的是RTB和RTB2对象中的text属性)。如果是这种情况,您获得的结果是否可能基于假设文本框中的文本正在进行比较?也许这个假设导致你按照你决定留在或跳出for循环的方式进行编码?