我的WinForms应用程序,我使用的日志文件,一个文本框。 我不使用形式闪烁文本追加TextBox.AppendText(string);
,但是当我试图清除旧文本(如控制的。文本属性达到.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();
}
}
有没有从不会导致闪烁控制的顶部清除文本行的一个更合适的方法? 一个文本框不具有的BeginUpdate()/ EndUpdate()的一个ListView具有的方法。
是一个TextBox控件,即使是控制台日志中最适合控制?
编辑:文本框闪烁似乎是文本框滚动到顶部(而我在净化控制的顶部的文本),然后立即滚动回落至底部。 - 这一切发生得很快,所以我刚才看到重复闪烁。
我也只是看到了这个问题 ,并建议是使用一个列表框,但我不知道这是否会在我的情况下工作,因为(在大多数情况下)我收到的为ListBox一个字符文本的时间。