C# 如何仅从文本框中获取新文本?
如何仅从文本框中获取新文本 像这样的C# 如何仅从文本框中获取新文本?,c#,wpf,xaml,textbox,C#,Wpf,Xaml,Textbox,如何仅从文本框中获取新文本 像这样的 private void tbLog_TextChanged(object sender, TextChangedEventArgs e) { //Get only NEW text added to Log } /* LOG old message... old message... old message... old message... NEW message... NEW messa
private void tbLog_TextChanged(object sender, TextChangedEventArgs e)
{
//Get only NEW text added to Log
}
/*
LOG
old message...
old message...
old message...
old message...
NEW message...
NEW message...
NEW message...
NEW message...
NEW message...
*/
对于桌面WPF文本框,您应该能够使用枚举更改。注:单个事件可能包含多个更改
该类具有Offset、AddedLength和RemovedLength属性,这些属性为您提供了更改的字符的确切范围。也许您应该使用该属性:
private string old_text = "";
private void tbLog_TextChanged(object sender, TextChangedEventArgs e)
{
if(old_text != tbLog.Text)
{
writeLog(tbLog.Text);
old_text = tbLog.Text;
}
}
也许你想澄清你所说的“新”是什么意思。您的意思是,自从上次触发TextChanged事件以来,在末尾添加了任何新文本吗?顺便说一句,也许看看textchangedventargs.Changes属性。我正在研究它,但我无法让调试器中断,以便我可以看到e.Changes中的内容。我只想要触发TextChanged事件的新文本。我希望在一次点击中避免那么多数据。这样做,我每次都会处理和写入整个文本框。文本框中有多少数据?然后使用
KeyDown
事件捕获按键并自己记录(同时保存光标位置)。请注意,如果您允许复制粘贴等操作,这可能会变得很棘手。您的文本是否也有那么长?我的日志中没有键入内容,它会在任务运行时由其他对象更新。没有键盘输入怎么办?啊。。。那你就完蛋了。您必须处理全文,或者让您的其他对象只发送更改的部分。这非常奇怪。我尝试过这个解决方案,但和我尝试过的其他方法一样,当事件触发时,没有任何东西起作用。当触发事件时,它甚至不会接受断点。我在整个过程中添加了这个和一个常规异常,因此不会抛出任何错误foreach(newTexts中的var-txt){MessageBox.Show(txt);}
。日志正在更新。。当我删除所有代码并保留自动滚动代码时,这是可行的,但其他的都不行。即使我只是把MessageBox.Show(“我工作过”)代码>,没有,没有MB…我必须道歉。我不知道是怎么回事。。但是VS一定是出了故障或是什么的。“自动滚动到结束”代码只在我调试的50%左右开始工作,然后就停止了。我去了一趟,发现不知何故该事件已从XAML代码中删除。。你上面的代码工作完美!!谢谢你的帮助!
var fullText = tbLog.Text;
if (e.Changes.Any())
{
var additions = e.Changes.Where(tc => tc.AddedLength > 0);
var newTexts = additions.Select(tc => fullText.Substring(tc.Offset, tc.AddedLength));
// TODO: Do stuff with the new pieces of text
}
private void textTx1Asc_TextChanged(object sender, EventArgs e)
{
string s;
//get only the new chars
s = textTx1Asc.Text;
s = s.Remove(0, prev_len);
//update prev_len for next time
prev_len = textTx1Asc.TextLength;
//s contains only the new characters, process here
}