调整富文本框大小时停止闪烁

时间:2015-07-25 21:23:30

标签: c# winforms

当高度超过810时,以下情况会导致闪烁。

如何防止这种情况发生?

<h1>Menu page</h1> 
<h2>Anchor example</h2>
<h3><a name="menu">Menu</a></h3>
<ul>
<li><a href="anchor_example2.html#a001">Jump to a001</a></li>
<li><a href="anchor_example2.html#a002">Jump to a002</a></li>
<li><a href="anchor_example2.html#a003">Jump to a003</a></li>
</ul>

2 个答案:

答案 0 :(得分:2)

您将Height设置为两次,而不是一次,导致Control重新绘制两次。

要防止该效果存储新高度的计算,然后只分配一次。

private void rtbScript_TextChanged(object sender,EventArgs e)
{
  var numberOfLines =   SendMessage(rtbScript.Handle.ToInt32(),EM_GETLINECOUNT,0,0);
  var newHeight = (rtbScript.Font.Height + 2) * numberOfLines;
  if(newHeight>810)
  {
    this.rtbScript.Height = 810;
  } 
  else 
  {
    this.rtbScript.Height = newHeight;
  }
}

答案 1 :(得分:1)

试试这个:https://stackoverflow.com/a/3718648/5106041 它闪烁的原因是因为winforms默认不进行双缓冲,这是WPF创建的原因之一,它不仅解决了这些问题(我们得到了一些新问题),而且你将拥有更丰富的布局系统。