如何检查WPF TextBox TextChange事件中添加文本的长度?

时间:2012-07-30 18:53:35

标签: c# wpf

我的WPF TextBox有一个TextChanged事件,如下所示:

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找出添加文本的长度?感谢。

2 个答案:

答案 0 :(得分:3)

您正在寻找的是如何从TextChange TextChange集合中提取e.Changes对象。以下应该有效:

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

但是,如果您想要看起来更具体的内容,您可以使用:

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

由于e.Changes据我所知目前将始终包含一个TextChange项目,我想它总是第一个甚至在未来的实现中WPF TextBox。

对于非Linq 实施对我来说似乎没必要,您可以使用以下庞大的代码:

var x = e.Changes.GetEnumerator();
x.MoveNext();
int added = x.Current.AddedLength;

答案 1 :(得分:0)

对于TextBox,似乎计数总是为1,因为TextBox不能包含除字符以外的任何内容。

但是我发现这个搜索有关TextChange的答案,并且只是想让其他人知道TextChange.Changes.Count在与RichTextBox一起使用时可以大于1。

这个结果可能有点令人困惑。

如果您只是学习使用此功能,请注意无论您是输入单个字符还是粘贴多行,计数都可以为1.

但是字体系列更改可以包含多个更改,实际上每个选定的单词看起来应用了已更改的字体系列。 但是,另一方面,对字体大小,下划线,粗体或斜体的更改可能导致Count = 0.

使用RichTextBox时,TextChange是由符号更改产生的,而不是字符更改。因此,您可以粘贴“Hello To All The World”并获得单个TextChange,因为它是包含粘贴文本的单个TextElement。