2012-07-30 64 views
4

我有一個TextChanged事件對我的WPF文本框,如下所示:如何檢查WPF TextBox TextChange事件中添加文本的長度?

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找出添加文本的長度?謝謝。

回答

3

您正在尋找的是如何從e.Changes TextChange集合中提取TextChange對象。下面應該工作:

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; 
+0

工程很好,但我不得不添加'使用System.Linq;',但沒有*常量*這樣做?即使有多個變化,0 **總是會檢索信息嗎?沒有LINQ怎麼辦? – rtuner 2012-07-30 19:10:36

0

對於一個文本框,似乎計數始終爲1,因爲一個TextBox不能包含字符以外的任何內容。

但是,我發現這個搜索有關TextChange的答案,只是想向其他人提供TextChange.Changes.Count與RichTextBox一起使用時可能大於1的知識。

這個結果可能有點混亂。

如果你剛開始學習這個工作,要知道,無論您輸入一個字符或粘貼多條線路中,計數可1.

但字體系列變化可以包括多個變化,實際上,對於更改後的字體系列應用到的每個選定字詞,似乎都是1。但是,另一方面,對字體大小,下劃線,粗體或斜體的更改可能會導致計數= 0.

對於RichTextBox,TextChange的結果來自符號更改,而不是字符更改。因此,您可以粘貼「Hello To All The World」並獲取單個TextChange,因爲它是包含粘貼文本的單個TextElement。

相關問題