C # Winforms — когда инициализируются полосы прокрутки для элемента управления?

#c# #winforms #scrollbar

#c# #winforms #полоса прокрутки

Вопрос:

Вот ситуация:

Я пытаюсь управлять полосой прокрутки flowLayoutControl с помощью devexpress controls VerticalScroll.

Теперь — flowLayoutControl с автоматической прокруткой = true. Я добавил новый элемент управления verticalscroll и закрепил его справа. Итак, теперь элемент управления вертикальной прокруткой Devexpress находится прямо поверх полосы прокрутки FlowLayout.

Также вертикальная прокрутка FlowLayoutPanel не скрывается при выполнении следующего кода:

     spotWinFlowLayout1.VerticalScroll.Visible = false
  

Я настроил следующие обработчики событий:

     private void spotWinFlowLayout1_Resize(object sender, EventArgs e)
    {
        SetupVerticalScrollBar();
    }        

    private void SetupVerticalScrollBar()
    {
        vScrollBar1.Minimum = spotWinFlowLayout1.VerticalScroll.Minimum;
        vScrollBar1.Maximum = spotWinFlowLayout1.VerticalScroll.Maximum;
        vScrollBar1.LargeChange = spotWinFlowLayout1.VerticalScroll.LargeChange;
        vScrollBar1.SmallChange = spotWinFlowLayout1.VerticalScroll.SmallChange;            
    }

    private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
    {
        spotWinFlowLayout1.VerticalScroll.Value = e.NewValue;
    }
  

Все работает нормально, за исключением случаев, когда при загрузке формы в flowLayoutControl уже есть полоса прокрутки,
Свойства spotWinFlowLayout1.VerticalScroll.XXX еще не установлены. Итак, обе полосы прокрутки не синхронизированы. Но как только я изменяю размер формы, обе синхронизируются.

Итак, когда инициализируется полоса прокрутки для FlowLayoutPanel?

Ответ №1:

Итак, когда инициализируется полоса прокрутки для FlowLayoutPanel?

Это может звучать как ответ smartalec: «Когда элемент управления нарисован или помещен в форму«, что является причиной того, что при настройке размера формы они синхронизируются. (они снова рисуются)

Решение состоит в том, чтобы вручную добавить полосы прокрутки самостоятельно.

Комментарии:

1. Ну, изначально установка для элемента управления значения visible = false, а затем при FormLoad значение true решает проблему. Спасибо за совет.

2. @Aseem — Я рад помочь, на самом деле мне поручили сделать что-то подобное во время занятий несколько лет назад. Это включало в себя разблокировку полосы прокрутки, когда было достаточно контента для прокрутки.