Во время прокрутки FlowLayoutPanel фон искажает + мерцания

У меня есть приложение форм окон, которое имеет фон. В нем у меня есть flowlayoutpanel с прозрачным фоном. Когда я прокручиваю, следующее происходит:

enter image description here

Я также вижу некоторое мерцание. Я попробовал весь бизнес с двойной буферизацией, и он не работает.

Какие-либо предложения?

14
задан LarsTech 5 December 2011 в 01:46
поделиться

1 ответ

Да, это не работает. Вот класс, который его несколько улучшает:

using System;
using System.Windows.Forms;

class MyFlowLayoutPanel : FlowLayoutPanel {
    public MyFlowLayoutPanel() {
        this.DoubleBuffered = true;
    }
    protected override void OnScroll(ScrollEventArgs se) {
        this.Invalidate();
        base.OnScroll(se);
    }
}

Скомпилируйте и перетащите его из верхней части панели инструментов в вашу форму. Однако он не может решить основную проблему - параметр «Показывать содержимое окна при перетаскивании». Это системная опция, она будет включена в более поздних версиях Windows. Когда он включен, сама Windows прокручивает содержимое панели, а затем просит приложение нарисовать ту часть, которая была открыта прокруткой. Метод OnScroll переопределяет это, обеспечивая перекрашивание всего окна, чтобы фоновое изображение оставалось на месте. Конечный результат не очень приятный, вы увидите, как изображение выполняет «пого», прыгая вверх и вниз при прокрутке.

Единственное решение для этого - отключение системного параметра. Это непрактичное решение, пользователям этот вариант нравится, и он влияет на все программы, а не только на вашу. Если вы не можете жить с pogo, вам придется отказаться от прозрачности.

10
ответ дан 1 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: