Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框文本管理_C#_Wpf_C# 4.0_Textbox_Wpf Controls - Fatal编程技术网

C# 文本框文本管理

C# 文本框文本管理,c#,wpf,c#-4.0,textbox,wpf-controls,C#,Wpf,C# 4.0,Textbox,Wpf Controls,我有一个WPF应用程序,我正在尝试创建一个“诊断面板”,它与VisualStudio2010中的“输出窗口”非常相似。它只包含一个文本框,在该文本框中,使用.AppendText()方法收集并附加所有类型的输出 我们有几个客户一直将此诊断面板关闭,但从未清除它。结果,当新的输出继续输入时,会显示大量的文本 WPF文本框有一个MaxLength属性,我将其设置为0。根据MSDN文档,“当此属性设置为0时,可在控件中输入的文本的最大长度仅受可用内存的限制。” 对于那些离开这个面板的客户来说,我讨厌让

我有一个WPF应用程序,我正在尝试创建一个“诊断面板”,它与VisualStudio2010中的“输出窗口”非常相似。它只包含一个文本框,在该文本框中,使用
.AppendText()
方法收集并附加所有类型的输出

我们有几个客户一直将此诊断面板关闭,但从未清除它。结果,当新的输出继续输入时,会显示大量的文本

WPF文本框有一个MaxLength属性,我将其设置为0。根据MSDN文档,“当此属性设置为0时,可在控件中输入的文本的最大长度仅受可用内存的限制。”

对于那些离开这个面板的客户来说,我讨厌让文本和内存变得不受控制。。。我认为这可能最终导致应用程序挂起

我很好奇是否有一个好办法来管理这个。。。我想在文本框中保留一定数量的行,并在新行出现时丢弃最旧的行

有什么想法吗


谢谢

你可以在你的代码背后有一个
调度员。您可以将其设置为每10分钟(或您想要的任何时间段)勾选一次。在Tick事件处理程序方法中,您可以获取文本框中的文本,丢弃除要保存的文本量以外的所有文本,然后将该文本设置回文本框

您还可以将文本保存到日志文本文件中。您必须找出要附加到文本文件的内容,这样您就不会多次将相同的文本写入该文件。这取决于你到底需要什么


正如Xaisoft所说,您不应该为此使用
TextBox
,而应该使用
TextBlock
。我不记得了,你可能必须把它放在一个
ScrollViewer中。

下面是你如何处理它的:

  • 将日志信息写入文本文件
  • 将日志信息写入文本框(虽然我不喜欢文本框,但应该可以)
  • 当写入文本框时,仅显示最后20行左右(使用此选项)。其他一切都应该“滚开”
  • 如果您的用户真的想保存所有内容,没什么大不了的,它已经保存到该文件中了


    每次执行应用程序时,或在适当的时间间隔,将日志记录滚动到一个新文件。

    为什么不使用列表框,每个句子都有自己的文本块?这样你就可以实现虚拟化了?

    为什么不使用列表框,让每个句子都有自己的文本块?感谢您的及时反馈。列表框能给我带来什么?我对你的回答很感兴趣。我只是不知道这样做的好处是什么。文本框真的应该只用于手动输入文本。@John Russell@iterationx,谢谢您的回复。我承认一开始我有点怀疑,直到我看到使用ItemsControl会给您带来虚拟化的好处。效果更好!但是,如果用户想保存所有文本,你可以将其写入日志文本文件,而不是将其丢弃,那该怎么办?