我的 WinForms 应用程序有一个 TextBox,我将其用作日志文件。我正在附加文本而没有使用闪烁的表单TextBox.AppendText(string);
,但是当我尝试清除旧文本时(因为控件的 .Text 属性达到 .MaxLength 限制),我得到了可怕的闪烁。
我正在使用的代码如下:
public static void AddTextToConsoleThreadSafe(TextBox textBox, string text)
{
if (textBox.InvokeRequired)
{
textBox.Invoke(new AddTextToConsoleThreadSafeDelegate(AddTextToConsoleThreadSafe), new object[] { textBox, text });
}
else
{
// Ensure that text is purged from the top of the textbox
// if the amount of text in the box is approaching the
// MaxLength property of the control
if (textBox.Text.Length + text.Length > textBox.MaxLength)
{
int cr = textBox.Text.IndexOf("\r\n");
if (cr > 0)
{
textBox.Select(0, cr + 1);
textBox.SelectedText = string.Empty;
}
else
{
textBox.Select(0, text.Length);
}
}
// Append the new text, move the caret to the end of the
// text, and ensure the textbox is scrolled to the bottom
textBox.AppendText(text);
textBox.SelectionStart = textBox.Text.Length;
textBox.ScrollToCaret();
}
}
有没有一种更简洁的方法可以从控件顶部清除不会导致闪烁的文本行?文本框没有 ListView 所具有的 BeginUpdate()/EndUpdate() 方法。
TextBox 控件甚至是最适合控制台日志的控件吗?
编辑: TextBox 闪烁似乎是文本框向上滚动到顶部(当我清除控件顶部的文本时),然后它立即向下滚动到底部。- 这一切都发生得很快,所以我只看到反复闪烁。
我也刚看到这个问题,建议使用 ListBox,但是我不知道这是否适用于我的情况,因为(在大多数情况下)我收到 ListBox 一个字符的文本一次。