Как отключить горизонтальную полосу прокрутки для панели таблицы в winforms

Привет У меня есть tablelayoutpanel, и я привязываю элементы управления к нему динамически. Когда счетчик предметов превышает высоту панели, очевидно, что вертикальная полоса прокрутки не появляется.

Но в то же время горизонтальная полоса прокрутки также появляется, даже ширина элементов меньше ширины панели. Как я могу предотвратить это?

Ответ 1

int vertScrollWidth = SystemInformation.VerticalScrollBarWidth;

tableLayoutPanel1.Padding = new Padding(0, 0, vertScrollWidth, 0);

Ответ 2

Потерял несколько волос на этом сегодня, но я решил это, и это то, с чем я закончил:

  • Создайте новый класс, который наследует от TableLayoutPanel (позволяет вызывать его MyTableLayoutPanel) и переопределяет свойство MaximumSize следующим образом:

    public override Size MaximumSize
    {
        get
        {
            if (Parent != null)
                return new Size(Parent.Width, 0);
            else
                return base.MaximumSize;
        }
        set
        {
            base.MaximumSize = value;
        }
    }
    

    Конечно, вы могли бы сделать это более общей целью, добавив другое свойство, которое решит, следует ли вам возвращать измененный максимальный размер или нет, но, надеюсь, многое очевидно для всех, кто читает это.

  • Измените параметр TableLayoutPanel, который у вас есть в новом типе MyTableLayoutPanel.

  • Добавьте его в обычную панель. Включите AutoScroll на этой панели вместо MyTableLayoutPanel (отключите его там, если вы еще этого не сделали).

  • Установите для свойства MySizeLayoutPanel AutoSize значение true и его свойство Anchor: Left, Right и Top.

Ответ 3

У меня была эта проблема с пристыкованной таблицей TableLayoutPanel, содержащей стыковочные GroupBoxes и единым столбцом, установленным на 100% ширину. Я не хотел устанавливать для них ручной размер - я хотел, чтобы они изменялись вместе с формой.

Странно, установив правильное заполнение таблицы TableLayoutPanel равным 1 (а не шириной полосы прокрутки), которая оставила пробел в размере полосы прокрутки, как и следовало ожидать) решила проблему полностью. Это в С# 2010 Express,.NET 4, Windows 8. Не знаю, работает ли этот kludge в других вариантах.

Настройка прокладки на 0, казалось, решила проблему в среде IDE, но проблема все еще существовала при фактическом запуске.

Понюхает какая-то ошибка в TableLayoutPanel для меня... или, может быть, это просто конкретная комбинация элементов управления и свойств, которые у меня есть (это довольно сложный макет).

Ответ 4

Является ли проблема в том, что ваши объекты в точности соответствуют ширине панели макета, так что, когда появляется прокрутка по вертикали, она немного сокращается в ваших элементах, заставляя горизонтальный свиток? Если это так, вы можете сделать свой контроль меньшим по ширине, чтобы учесть возможность полосы прокрутки, или вы можете попытаться настроить их, когда появится полоса прокрутки.

Ответ 5

Я столкнулся с этой проблемой.

Многие люди также сталкиваются с такой же проблемой в Datagrid. Но нет точного решения для этого вопроса, вам придется вручную определить размер панели в соответствии с использованием.

tableLayoutPanel1.HorizontalScroll.Enabled = false;

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

Другим способом может быть вычисление возможной ширины таблицы tablelayoutpanel во время выполнения, а если оно больше установленного вами значения, вы можете включить его.

tableLayoutPanel1.HorizontalScroll.Enabled = true;

Ответ 6

Это отлично работало в .NET 3.5, где другие решения не дали мне именно то, что я хотел:

  if (this.TableLayoutPanel1.HorizontalScroll.Visible)
  {
    int newWid = this.TableLayoutPanel1.Width -
                  (2 * SystemInformation.VerticalScrollBarWidth);
    //this.TableLayoutPanel1.Padding = new Padding(0, 0, newWid, 0);
    foreach (Control ctl in this.TableLayoutPanel1.Controls)
    {
      ctl.Width = newWid;
    }
  }

Ответ 7

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

Я предполагаю, что TLP с разными столбцами и строками имеет проблемы для вычисления ширины для каждого и, таким образом, показывает вертикальную полосу прокрутки, даже если это не необходимо.