Да, это не работает. Вот класс, который несколько улучшает его:
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 переопределяет это, обеспечивая перерисовку всего окна, чтобы фоновое изображение оставалось на месте. Конечный результат не очень хорош, вы увидите, как изображение делает «пого», прыгая вверх и вниз во время прокрутки.
Единственное решение для этого — отключить системную опцию. Это не практическое решение, пользователям нравится этот вариант, и он влияет на все программы, а не только на вашу. Если вы не можете жить с пого, вам придется отказаться от прозрачности.
person
Hans Passant
schedule
27.07.2010