WinForms: Как избежать горизонтальной полосы прокрутки с помощью AutoScroll? - PullRequest
3 голосов
/ 04 марта 2011

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

Как правильно гарантировать, что горизонтальная полоса прокрутки не появляется, когда в ней нет необходимостис учетом того, что я управляю размещением элемента управления вручную (не полагаясь на AnchorStyles)?(Примечание: я не могу управлять свойством VScroll вручную, потому что я нахожусь на Compact Framework; и если минимальная ширина элемента шире, чем область клиента, то законная горизонтальная полоса прокрутки потребуется.)

Ответы [ 2 ]

2 голосов
/ 06 марта 2011

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

Что я делал, чтобы определить,полоса прокрутки была либо:

  1. Тест для WS_VSCROLL был установлен на элементе управления через P / Invoke через GetWindowLong () .
  2. Сканирование дочерних элементов элемента управления для элемента управления с вертикальной полосой прокрутки.

Зависит от того, как элемент управления обрабатывает полосы прокрутки относительно правильной.

Также это было в Windows, не в CF, поэтому я не уверен, будет ли это работать точно так же.

2 голосов
/ 06 марта 2011

Учитывайте ширину вертикальной полосы прокрутки при расчете необходимой ширины для дочерних элементов управления:

System.Windows.Forms.SystemInformation.VerticalScrollBarWidth
...