ダブルバッファリングに関するこの記事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);