2009-08-11 4 views
0

フォームにBackgroundImageプロパティを設定する代わりに、各フォームの背景にイメージを描画するためにOnPaintイベントを処理する代わりに、データベースにバックグラウンドイメージを格納しています。問題はフォームの各コントロールがフォームの親コントロールを無効にするため、OnPaintが複数回(12x)発生することです。イメージが記憶されているにもかかわらず、フォームはすぐにちらつきます。私はこの効果を取り除く必要があります。親フォームを再描画する最後のコントロールを特定する方法を見ることができないので、バックグラウンドを1回だけ適用できます。何か案は?複数の背景をrepaintする方法.NET Winform

protected override void OnPaint(PaintEventArgs e) 
    { 
     if (Program.AppManager.AppBackgroundImage != null && !this.EH_BackImageNotApplicable) 
     { 
      e.Graphics.DrawImage(Program.AppManager.AppBackgroundImage, this.ClientRectangle); 
     } 
    } 
+0

OnPaintメソッドのコードを共有できますか? –

+0

これを追加しました。 OnPaintメソッドはFormBaseでオーバーライドされています。あなたが何か他のものが必要な場合は教えてください。 – David

答えて

0

フォームの "DoubleBuffered"プロパティがtrueに設定されていることを確認します。それでも解決しない場合は、あなたがあなた自身のダブルバッファリングを管理することができます

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
ControlStyles.AllPaintingInWmPaint, true); 
// OR 
DoubleBufferred = true; // sets both flags 

+0

それは少し助けたが、それでも偉大ではなかった。私はこのようなことがあることさえ知りませんでした。ありがとうございました。 – David

関連する問題