Попробуйте установить для свойства DoubleBuffered формы значение True.
Обновление : на самом деле, это, вероятно, ничего не даст, так как ваши элементы управления находятся на панели в вашей форме. Встроенный элемент управления Panel не имеет открытого свойства DoubleBuffered, поэтому способ сделать это - добавить имя DBCanel UserControl в ваш проект и изменить код так, чтобы он наследовал от Panel вместо UserControl (вы можете изменить это вручную в файл CS после его добавления). Когда вы добавляете UserControl, код будет выглядеть так:
public partial class DBPanel : UserControl
{
public DBPanel()
{
InitializeComponent();
}
}
Отредактируйте его так, чтобы он выглядел следующим образом (измените UserControl на Panel и добавьте строку «this.DoubleBuffered = true;» в конструктор):
public partial class DBPanel : Panel
{
public DBPanel()
{
InitializeComponent();
this.DoubleBuffered = true;
}
}
Когда вы строите проект, компилятор будет вставлять строку, начинающуюся с "this.AutoScaleMode ...". Удалите эту строку и перестройте.
Теперь вы можете использовать элемент управления DBPanel в своей форме вместо обычной панели, и это должно решить вашу проблему мерцания.
Обновление 2 : извините, я недостаточно внимательно прочитал ваш вопрос. Вы правы, Панель не перерисовывает себя, пока вы не отпустите большой палец полосы прокрутки. Я думаю, что для достижения этого эффекта вам просто нужно создать свой собственный UserControl.
По сути, вы бы просто имели UserControl с пристыкованной VScrollBar справа и Panel с AutoScroll = false, пристыкованной слева, занимающей оставшуюся часть пространства. События Scroll и ValueChanged в VScrollBar запускаются при перемещении большого пальца вверх и вниз, поэтому после добавления группы LinkLabels к внутренней панели вы можете использовать эти события, чтобы изменить верхнюю позицию панели и, таким образом, добиться эффекта динамической прокрутки. Вы ищете.
Отчасти раздражает, что Panel по умолчанию не работает таким образом, или даже имеет настройку, которая ее включает.