簡體   English   中英

C#文本框停止閃爍

[英]C# textbox stop flickering

我有一個多行文本框,我在其中顯示應用程序日志。 如果長度大於1k個字符,我會記錄日志。 問題是它在閃爍。 如果數據不同,我使用計時器控件來更新帶有條件的文本框。

有什么方法嗎? 或者有更好的方法來顯示日志? 謝謝!

// this is inside timer
if(txt_log.Text != MY_LOG_VAR){
   txt_log.Text = MY_LOG_VAR;
}

// function to update log
public void Log(string data){

  MY_LOG_VAR = data + "\r\n" + MY_LOG_VAR;

  if(MY_LOG_VAR.Length > 1000){
     substr...
  }
} 

Log函數甚至可以每秒調用20次,定時器間隔設置為100秒;

它沒有閃爍太多,但如果將大量數據提交給日志,我需要一個解決方案,使文本框甚至可以全屏而不閃爍..謝謝!

關於TextBox繪制的方式,您無法做任何事情。 它承擔了一些罪惡,比如沒有WM_PAINT的繪畫,這在1985年必須在嚴格受限的硬件上運行時非常重要。 1K字符相當低端,64K是一個很好的圓形數字,可以減少閃爍。 並確保在兩者之間使用AppendText。

除此之外,請考慮使用RichTextBox。 它是雙緩沖區,並且有更好的方法使文本成為只讀。

您應該嘗試使用TextBox.AppendText而不是替換文本框的整個內容。

// function to update log 
public void Log(string data)
{ 
  textBox1.AppendText(data + "\r\n");
  MY_LOG_VAR = data + "\r\n" + MY_LOG_VAR; 

}  

這與將新文本放在前一個文本之前不同,但我認為應該停止閃爍。 我用RichTextBox做了一些測試,根本沒有閃爍(正如Hans Passant在答案中所說的那樣)......

例如,滾動沒有閃爍

 richTextBox1.AppendText(data +"\n");
 richTextBox1.SelectionStart = richTextBox1.GetFirstCharIndexFromLine(richTextBox1.Lines.Count()-1);
 richTextBox1.ScrollToCaret();

您是否嘗試過在文本框中調用BeginUpdate / EndUpdate來更新更新?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM