Как отключить горизонтальную полосу прокрутки в FlowLayoutPanel?

#c# #winforms #scrollbar #flowlayoutpanel

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

Вопрос:

У меня есть FlowLayoutPanel, и на ней есть несколько элементов управления. Я хочу прокручивать только в вертикальном направлении. Но когда я установил AutoScroll = true , я получил как вертикальную, так и горизонтальную полосы прокрутки. Как я мог отключить горизонтальную полосу прокрутки и поддерживать работу только вертикальной полосы прокрутки?

Ответ №1:

  • Установите для автоматической прокрутки значение true
  • Установите для WrapContents значение false.
  • Убедитесь, что размер больше ширины элементов управления плюс ширина вертикальной полосы прокрутки.

Горизонтальная полоса прокрутки должна исчезнуть. Если это не так, пожалуйста, предоставьте дополнительную информацию.

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

1. Спасибо за это! Только сейчас я играю с этим и обнаруживаю, что если я установил FlowDirection =leftToRight, FlowLayoutPanel. HorizontalScroll.Visible = false, wrapContents = true. Это работает… Итак, есть несколько способов сделать это? В любом случае спасибо! 🙂

2. Я заметил, что включение WrapContents (с потоком LeftToRight) создаст «перевод строк» и, следовательно, никогда не потребует горизонтальной полосы прокрутки. на самом деле мне это не нравится, я хочу, чтобы значение WrapContents было равно false, но я все еще хочу, чтобы свойство FlowBreak работало, чтобы вручную управлять переводом строк. Однако это не работает. Свойство FlowBreak игнорируется из-за явной ошибки этого элемента управления, если значение WrapContents равно false. ого, Microsoft. еще раз.

3. Я использую WrapContents. Для достижения желаемого результата я заключил свою FlowLayoutPanel в элемент управления Panel, затем установил для автопрокрутки панели значение true, для автопрокрутки FlowLayoutPanel значение false, и это работает!

Ответ №2:

Установите для автоматической прокрутки значение true. Установите для WrapContents значение false. Установите отступ справа на 10.

Для меня это работает довольно хорошо.

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

1. Я подумал «ни в коем случае, это не может работать», но да, правильное заполнение сделало трюк: S

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

3. как насчет отключения вертикальной полосы прокрутки вместо необходимой горизонтальной полосы прокрутки? @пользователь2559770 ?

Ответ №3:

Вот как я реализую, чтобы на FlowLayoutPanel было несколько меток с переносным текстом (WrapContents = true), только с вертикальной полосой прокрутки.

  1. У меня есть flowLayoutPanel1 в форме
  2. Установите свойства form и flowLayoutPanel1, как показано ниже:

форма:

 AutoScroll = True
FormBorderStyle = Sizable(default)
  

flowLayoutPanel1:

 Anchor = Top, Left, Right
AutoSize = True
FlowDirection = TopDown
WrapContents = true
  
  1. Реализуйте этот код в классе form для тестирования

 int coorY = 0;
        public Form2()
        {
            InitializeComponent();
            for (int i = 0; i < 100; i  )
            {
                flowLayoutPanel1.Controls.Add(new Label 
                { 
                    Location = new Point(0, coorY   20),
                    Font = new Font("Segoe UI", 10f),
                    Text = "I have a FlowLayoutPanel and there are multiple controls on it. I only want to scroll in vertical",
                    Width = flowLayoutPanel1.Width,
                    AutoSize = true
                });
                coorY  = 20;
            }
        }  

Вертикальная полоса прокрутки в действии