4

TextChanged次のように、WPFTextBoxのイベントがあります。

private void textMatch_TextChanged(object sender, TextChangedEventArgs e)
{
    var m = e.Changes;//here I can see e.Changes has what I'm looking for
    //do some other stuff here.
}

しかし、私がやりたいのは、追加されたテキストの長さを確認することです。どうやら、e.Changesその値が含まれていますが、プログラムでそれを見つける方法を見つけることができず、オンラインで例を見つけることもできませんでした。

これをチェックする私の現在の方法は、テキストが変更されるたびに現在の長さを保存し、新しい長さが1だけ増えることを確認することですが、それは私にとってハッキングのようなものです。

誰かがこれを以前に試したことがありますか??を使用して、追加されたテキストの長さを確認するにはどうすればよいTextChangedEventArgsですか?ありがとう。

4

2 に答える 2

3

探しているのは、 TextChangeコレクションTextChangeからオブジェクトを抽出する方法です。e.Changes以下が機能するはずです。

int added = e.Changes.ElementAt(0).AddedLength;

ただし、より具体的に見えるものが必要な場合は、次を使用できます。

int added = e.Changes.FirstOrDefault().AddedLength;

現時点でe.Changes私が知る限り、常に1つのアイテムが含まれるため、WPFTextBoxの将来の実装でも常に最初のアイテムになると思います。TextChange

私には本当に不要と思われる非Linq実装の場合、次のかさばるコードを使用できます。

var x = e.Changes.GetEnumerator();
x.MoveNext();
int added = x.Current.AddedLength;
于 2012-07-30T18:58:16.397 に答える
0

TextBoxの場合、TextBoxには文字以外のものを含めることができないため、カウントは常に1になるようです。

しかし、私はこれがTextChangeに関する回答を検索していることに気付き、RichTextBoxで使用するとTextChange.Changes.Countが1より大きくなる可能性があるという知識を他の人に提供したいと思います。

この結果は少し混乱する可能性があります。

これを操作する方法を学習しているだけの場合は、1つの文字を入力するか複数の行を貼り付けるかに関係なく、カウントは1になる可能性があることに注意してください。

ただし、フォントファミリの変更には複数の変更が含まれる場合があります。実際、変更されたフォントファミリが適用された選択された単語ごとに1つであるようです。ただし、一方で、フォントサイズ、下線、太字、または斜体を変更すると、カウント=0になる可能性があります。

RichTextBoxを使用すると、TextChangeは文字の変更ではなく、記号の変更によって発生します。したがって、「Hello To All The World」を貼り付けて、貼り付けられたテキストを含む単一のTextElementであるため、単一のTextChangeを取得できます。

于 2017-11-19T20:51:52.623 に答える