Нужно ли рисовать мои элементы управления Windows Forms? - PullRequest
2 голосов
/ 06 марта 2011

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

Я думал, что приостановка макета была способом избежать этого, но он не работает для меня.

Я приостанавливаю макет для контейнера и всех его элементов управления, пока происходит изменение размера.

Нужно ли переопределить метод рисования для дочерних элементов управления? Конечно, это будет означать новые пользовательские элементы управления, чтобы заменить все стандартные, или мне нужно переопределить метод рисования для контейнера?

1 Ответ

0 голосов
/ 06 марта 2011

РЕДАКТИРОВАНИЕ для исправления информации и ссылки

Один из подходов - двойной буфер.Люди часто устанавливают этот стиль и считают, что он работает, но на самом деле вы можете не получить двойную буферизацию по разным причинам.Но истинная двойная буферизация также может иметь некоторые негативные последствия.

Следующее решение, предложенное Гансом Пассантом, обычно решает проблему такого рода, не вызывая некоторых побочных эффектов двойной буферизации.

Фон метки ярлыка, щелкающий по пользовательскому элементу управления WinForms, имеет включенное фоновое изображение

При удалении атрибута WS_CLIPCHILDREN места, которые должны занимать элементы управления, будут сначала заполняться фоном,может уменьшить артефакты, которые вы видите в ожидании рисования элементов управления

Добавьте следующий код в свой пользовательский элемент управления:

protected override CreateParams CreateParams
    {
        get
        {
            CreateParams parms = base.CreateParams;
            parms.Style &= ~0x02000000;  // Turn off WS_CLIPCHILDREN
            return parms;
        }
    }
...