0

我正在看这篇关于双缓冲的文章https://web.archive.org/web/20121123031717/http://www.bobpowell.net/doublebuffer.htm 。我喜欢它的想法,并想在我的 RichTextBox 类上使用它,因为我试图在框中保留几行(10k+)行,每次滚动或更改字符时,将可视文本复制到字符串并放置在另一个 rtb 上要进行语法着色。

问题是当我开始滚动时,我在保存所有文本的 rtb 中出现了非常糟糕的闪烁。我想等到用户完成滚动(如果他们滚动超过一页)来重绘 rtb 中的文本。双缓冲会有帮助吗?以及如何从列出的网站中按照此方法实际“绘制” rtb 中的文本?

方法:

protected override void OnPaint(PaintEventArgs e)
{
  if(_backBuffer==null)
  {
    _backBuffer=new Bitmap(this.ClientSize.Width,this.ClientSize.Height);
  }
  Graphics g=Graphics.FromImage(_backBuffer);
  //Paint your graphics on g here
  g.Dispose();
  //Copy the back buffer to the screen
  e.Graphics.DrawImageUnscaled(_backBuffer,0,0);
  //base.OnPaint (e); //optional but not recommended
}

编辑:您还必须将 TextBox 样式设置为此

this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer, true);
    
4

0 回答 0