Пользовательский элемент управления мерцает при смене фона - PullRequest
0 голосов
/ 09 октября 2011

У меня есть пользовательский элемент управления, на котором есть другие элементы управления. Когда пользователь нажимает на него, я рекурсивно просматриваю все элементы управления и меняю цвет фона на синий. Тем не менее, я получаю серьезную проблему мерцания, поскольку элементы управления меняют цвет по отдельности. У меня включена двойная буферизация, но я сомневаюсь, что она оптимизирует мой рисунок. У меня есть подозрение, что это не самый лучший способ добиться такого эффекта.

Как мне избавиться от этого мерцания? Или есть лучший способ сделать это?

Мой звонок OnClick:

ControlUtils.SetColorRecursive(this, Color.LightSteelBlue);

SetColorRecursive:

    tCtl.SuspendLayout();

        if (tCtl != null)
        {
            // Set Color
            tCtl.BackColor = tColor;

            foreach (Control tSubCtl in tCtl.Controls)
            {
                // Ignore the following
                if (tSubCtl is TextBox) continue;
                if (tSubCtl is ListBox) continue;
                if (tSubCtl is NumericUpDown) continue;

                // Recursively change sub-controls
                SetColorRecursive(tSubCtl, tColor);
            }
        }

    tCtl.ResumeLayout();

Ответы [ 2 ]

0 голосов
/ 09 октября 2011

Я обнаружил, что это решает мою проблему на Vista и выше. Пользователи WinXP могут быть SOL.

    protected override CreateParams CreateParams
    {
        get
        {
            // This eliminates child control flicker when selecting
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;
            return cp;
        }
    }
0 голосов
/ 09 октября 2011

У вас включена двойная буферизация на фоне каждого перекрашиваемого элемента управления?(не только форма)

...