Приложение My WinForms имеет TextBox, который я использую в качестве файла журнала. Я добавляю текст без мерцания формы, используя TextBox.AppendText(string);
, однако, когда я пытаюсь очистить старый текст (поскольку свойство .Text элемента управления достигает предела .MaxLength), я получаю ужасное мерцание.Остановить мерцание TextBox во время обновления
код я использую следующим образом:
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 даже самый подходящий элемент управления для журнала консоли?
Редактирование: мерцание TextBox выглядит как текстовое поле, прокручивающееся вверх (в то время как я очищаю текст в верхней части элемента управления), а затем он немедленно прокручивается вниз. - все происходит очень быстро, поэтому я просто вижу повторяющееся мерцание.
Я также только что видел this question, и было предложено использовать ListBox, однако я не знаю, будет ли это работать в моей ситуации, так как (в большинстве случаев) я получаю текст для ListBox по одному персонажу за раз.
Возможно, вы захотите изменить это «если» на «пока» - в случае, если удаление первой строки текста недостаточно, чтобы новый текст соответствовал текстовому блоку. –
Хорошо пятнистый Ноам. Благодарю. – Bryan
У этого сообщения есть дополнительная информация об этом - http://stackoverflow.com/questions/1333393/how-to-prevent-a-windows-forms-textbox-from-flickering-on-resize –