L'applicazione WinForms dispone di un controllo TextBox che sto utilizzando come file di registro. Sto aggiungendo il testo senza lo sfarfallio del modulo utilizzando TextBox.AppendText(string);
, tuttavia quando provo a eliminare il vecchio testo (poiché la proprietà .Text del controllo raggiunge il limite .MaxLength), ottengo uno sfarfallio tremendo.Arresto dello sfarfallio TextBox durante l'aggiornamento
Il codice che sto utilizzando è il seguente:
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();
}
}
Esiste un modo più ordinato di spurgo righe di testo dalla parte superiore del controllo che non causa lo sfarfallio? Una casella di testo non ha i metodi BeginUpdate()/EndUpdate() che ha un ListView.
Un controllo TextBox è persino il controllo più adatto per un log di console?
Modifica: Lo sfarfallio della casella di testo sembra essere la casella di testo che scorre verso l'alto (mentre rimuovo il testo nella parte superiore del controllo), quindi scorre immediatamente verso il basso. - Succede tutto molto velocemente, quindi vedo solo lo sfarfallio ripetuto.
Ho anche appena visto this question, e il suggerimento era di usare un ListBox, tuttavia non so se questo funzionerà nella mia situazione, come (nella maggior parte dei casi) sto ricevendo il testo per il ListBox un personaggio alla volta
Potrebbe voler cambiare "se" in "while", nel caso in cui l'eliminazione della prima riga di testo non sia sufficiente per consentire al nuovo testo di adattarsi al TextBox. –
Notam ben chiazzato. Grazie. – Bryan
Questo post ha qualche informazione in più su questo - http://stackoverflow.com/questions/1333393/how-to-prevent-a-windows-forms-textbox-from-flickering-on-resize –