0

ここでルールを破っていないことを願っています。別の投稿について質問がありますが、私は stackoverflow をあまり使用していないため、評判が低すぎて、自分のものではない質問や回答にコメントを追加できません。

この質問について: 2 つのリッチ テキスト ボックスの内容を比較し、変更された文字を強調表示する方法は?

TaW はいくつかのサンプル C# コードを提供し、Visual Studio プロジェクトでそれを利用しました。しかし、私たちは問題を発見し、それを修正する方法がわかりません。

RTB1 に "My name is David" というテキストが含まれ、RTB2 に "My name is" というテキストが含まれている場合、比較の実行後に diff コレクションに 2 つの diff が存在し、何らかの形でリッチ テキスト ボックスが書き直されて相違点が表示されます。 、RTB1 は RTB2 と完全に一致し、何も強調表示されません。おそらくこれは予期された動作であり、私たちはそれを認識していませんが、RTB1 のテキスト「David」が強調表示されることを望んでいました.

RTB2 のテキストが "My name is " (行末に 2 つのスペースを追加) の場合、期待どおりの動作が得られます。

TaW の C# コードに相当する VB.NET を作成し、違いに気付いたことを言及する必要がありました。コメントの違いに気づきました。

私が 50 までの評判だった場合、私はコメントに、彼の例を共有してくれたTaWと DiffMatchPatchの作成者に非常に感謝していると付け加えたでしょう。

4

1 に答える 1

0

私たちは問題を理解したと思います。私たちのプロジェクトでは vb.net を使用しており、C# から VB に正しく変換したことはほぼ確実です。ただし、C# の collectChunks 関数では、オブジェクト内のテキスト プロパティではなく、RTB と RTB2 をオブジェクトとして比較しています。たとえば、RTB と RTB2 を比較すると、比較対象の 2 つのテキスト ボックスのテキストが同じであっても、コードはオブジェクトと、テキスト ボックスの位置を含むその他すべての関連プロパティを比較します。したがって、最初の == は常に false です。

VB では、オブジェクトの比較を行うことはできません。つまり、RTB = RTB2 の使用は許可されていません。if ステートメントで RTB.Text = RTB2.Text を使用する必要があります。(VB で RTB オブジェクトを比較する方法はありますが、実際に比較する必要があるのは、RTB オブジェクトと RTB2 オブジェクトの text プロパティだと思います)。この場合、得られた結果は、テキスト ボックス内のテキストが比較されているという仮定に基づいている可能性はありますか? そして、おそらくその仮定によって、for ループにとどまるか、for ループから飛び出すかを決めた方法でコーディングすることになったのではないでしょうか?

于 2015-05-21T17:45:56.557 に答える