TextBox文本管理

时间:2012-02-03 21:40:26

标签: c# wpf c#-4.0 textbox wpf-controls

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

我们有几个客户一直都在离开这个诊断面板,从不清除它。因此,当新输出继续进入时,会显示大量文本...

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

对于离开此面板的客户,我讨厌让文本和内存不受控制地发生......我认为这可能最终会导致应用程序挂断...

我很好奇是否有一个很好的方法来管理这个...我想在文本框中显示一定数量的行并丢弃最旧的行,因为新的行进来...

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

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

您还可以将文本保存到日志文本文件中。您必须弄清楚要附加到文本文件的内容,这样您就不会多次写入相同的文本。这取决于您的需求究竟是什么。

DispatcherTimer documenation

就像Xaisoft所说,你不应该使用TextBox来代替TextBlock。你可能不得不把它放在ScrollViewer内,我不记得。

答案 1 :(得分:0)

以下是您处理它的方式:

  1. 将日志信息写入文本文件
  2. 将日志信息写入文本框(虽然我不喜欢文本框,但应该没问题。)
  3. 当写入文本框时,只显示最后一个20左右(玩这个)行。其他一切都应该“滚滚”
  4. 如果您的用户确实想要保存所有内容,那就没有大问题,它已经保存到该文件中。

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

答案 2 :(得分:0)

为什么不使用列表框,每个句子都有自己的文本块 - 所以你可以获得虚拟化? http://social.msdn.microsoft.com/Forums/en/wpf/thread/98090161-0abf-4799-bbcb-852dcc0f0608