Stoppen TextBox flackert beim update

Meiner WinForms-Anwendung hat eine TextBox, die ich als log-Datei. Ich bin mit dem anfügen von text, ohne die form zu flackern mit TextBox.AppendText(string);, aber wenn ich versuche zu reinigen, die alten Texte (wie die der kontrollperson .Text-Eigenschaft erreicht .MaxLength-Grenzwert), bekomme ich furchtbare flimmern.

Den code, den ich verwende ist wie folgt:

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();
    }
}

Ist es ein ordentlicher Weg, der Spülung Zeilen text von der Spitze der Kontrolle, dass nicht ein flackern verursachen? Eine textbox hat nicht die BeginUpdate()/EndUpdate () - Methoden, die eine ListView hat.

Ist ein TextBox-Steuerelement auch den am besten geeignet, die Steuerung für einen Konsolen-log?

Edit: Die TextBox flackert erscheint die textbox scrollen bis zu der Spitze (während ich Spülen Sie den text oben auf der Steuerung) und dann sofort scrollt wieder nach unten auf den Boden. - es geschieht alles sehr schnell, so dass ich nur wiederholt flackern.

Hab ich auch gerade gesehen diese Frage, und der Vorschlag war, verwenden Sie eine ListBox, allerdings weiß ich nicht, ob dies funktionieren wird in meiner situation (in den meisten Fällen) ich erhalte den text für die ListBox ein Zeichen zu einem Zeitpunkt.

  • Vielleicht wollen das ändern ", wenn" in "während" - im Falle das löschen der ersten Zeile der text ist nicht genug, um den neuen text zu passen die TextBox.
  • Gut erkannt Noam. Danke.
  • Dieser Beitrag hat einige weitere Informationen zu diesem Thema - stackoverflow.com/questions/1333393/...
  • In der Tat hat es eine sehr klare Lösung, dass doppelte Pufferung gilt nicht für Textfelder so sollte man es manuell machen...
  • Vinko, postet bitte den obigen Kommentar als eine Antwort, so kann ich es akzeptieren.
  • VERWENDEN Sie EINFACH RichTextBox statt. ES IST FLACKERFREI. Set DetectUrls-und ShortcutsEnabled-Eigenschaft auf FALSE für mehr Kompatibilität mit TextBox ' es. Es funktioniert wirklich Super.

InformationsquelleAutor Bryan | 2009-10-11
Schreibe einen Kommentar