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

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

И я попробовал

Me.SetStyle(ControlStyles.DoubleBuffer _
Or ControlStyles.AllPaintingInWmPaint _
Or ControlStyles.UserPaint _
Or ControlStyles.SupportsTransparentBackColor, _
True)

После инициализацииComponent () для включения двойного буфера в этом пользовательском элементе управления, но похоже, что это не работает.


person user294720    schedule 16.03.2010    source источник


Ответы (1)


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

Вы можете сделать его менее нежелательным, разрешив UC рисовать себя в клиентской области элементов управления, чтобы фон уже был установлен правильно. Вставьте этот код в класс UserControl:

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

Это не ускоряет рисование и может иметь побочные эффекты. Если это все еще проблема, вам нужно ускорить отрисовку BackgroundImage. Предварительно масштабируйте его до клиентского размера пользовательского элемента управления, чтобы его можно было рисовать без масштабирования. Используйте для растрового изображения формат PixelFormat.Format32bppPArgb, он примерно в 10 раз быстрее любого другого на большинстве видеоадаптеров.

person Hans Passant    schedule 16.03.2010