0

ダブルバッファリングに関するこの記事https://web.archive.org/web/20121123031717/http://www.bobpowell.net/doublebuffer.htmを見ています。私はそのアイデアが好きで、RichTextBox クラスで使用したいと考えています。これは、ボックスに数行 (10k +) を保持しようとしており、文字をスクロールまたは変更するたびに、表示可能なテキストを文字列にコピーして配置するためです。別の rtb でそれを構文色にします。

問題は、スクロールを開始すると、すべてのテキストを保持する rtb で非常にひどいちらつきが発生することです。ユーザーがスクロールを完了するまで (複数ページをスクロールする場合)、rtb のテキストを再描画するまで待ちたいと思います。ダブルバッファリングはこれを助けますか? そして、リストされているWebサイトのこの方法のように、実際に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