Как предотвратить многократную перерисовку фона .NET winforms - PullRequest
0 голосов
/ 11 августа 2009

У меня есть фоновое изображение, хранящееся в базе данных, поэтому вместо установки свойства BackgroundImage формы я обрабатываю событие OnPaint, чтобы нарисовать изображение на фоне для каждой формы. Проблема заключается в том, что каждый элемент управления в форме аннулирует родительский элемент управления - форму, поэтому OnPaint срабатывает несколько раз (12x). Даже если изображение находится в памяти, форма быстро мигает. Мне нужно избавиться от этого эффекта. Я не могу найти способ определить, какой элемент управления является последним, что вызывает перерисовку родительской формы, поэтому я могу применить фон только один раз. Есть идеи?

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

Ответы [ 2 ]

0 голосов
/ 13 августа 2009

Попробуйте это:

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

Если это не поможет, вы можете управлять собственной двойной буферизацией. Посмотрите на статьи, как это: http://www.switchonthecode.com/tutorials/winforms-tutorial-manage-your-own-double-buffering

0 голосов
/ 11 августа 2009

Убедитесь, что для свойства "DoubleBuffered" в форме установлено значение true.

...