Странное поведение AutoScroll - PullRequest
1 голос
/ 27 февраля 2012

Введение

Я написал простой пользовательский элемент управления.

Элемент управления содержит панель FlowLayoutPanel и кнопку на ней.

Обработчик события нажатия кнопки выглядит следующим образом:

private void uxAdd_Click(object sender, EventArgs e)
{
    count++;
    Label label = new Label();
    label.Text = "Label " + count.ToString();
    uxFlowLayout.Controls.Add(label);
}

Кнопка Add добавляет метку к FlowLayoutPanel, и поскольку свойства FlowLayoutPanel.AutoSize и AutoSize элемента управления равны true, а FlowLayoutPanel.FlowDirection равна TopDown, элемент управления будет увеличен по высоте.

Я поместил свой пользовательский элемент управления в форму и установил для свойства AutoScroll формы значение true.

Также я написал следующий Layout обработчик событий:

private void MainForm_Layout(object sender, LayoutEventArgs e)
{
    uxSection.Width = this.ClientSize.Width;
}

( uxSection - это пользовательский элемент управления, о котором я говорю в начале раздела Введение )

Задача

Вот что я делаю:

Шаг 0 . Запустите программу.

Шаг 1 . Добавьте несколько меток, чтобы появилась вертикальная полоса прокрутки.

Шаг 2 . Прокрутите до конца формы.

Шаг 3 . Изменение размера формы по горизонтали.

enter image description here

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

Итак, вопрос в том, чего мне не хватает? Почему полоса прокрутки сбрасывается наверх?

1 Ответ

0 голосов
/ 28 февраля 2012

Это происходит потому, что весь элемент управления перерисовывается при изменении размера.

Вам нужно либо сохранить положение полосы прокрутки, сохраненной в переменной, чтобы при возникновении события изменения размера вы могли сбросить положение полосы прокрутки ИЛИ вам понадобится переместить полосу прокрутки в конец списка когда событие resize вызывается с использованием количества элементов в вашем списке, чтобы вычислить, где находится нижний элемент, а затем переместить полосу прокрутки в это положение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...