Включить полосы прокрутки в окнах

Я разрабатываю приложение для форм Windows. В моем приложении у меня есть привязанные элементы управления к формам, так что формы могут быть увеличены, и элементы управления будут упорядочены соответствующим образом. Это приложение должно поддерживать разные значения DPI.

Я установил привязки некоторых элементов управления снизу, справа и внизу справа. Свойству AutoScroll для форм присваивается значение true. Когда значение DPI по умолчанию (96) работает, как и ожидалось. Но проблема в том, что экран загружается в более высокий DPI (например, 120), даже если включены полосы прокрутки, элементы управления, которые привязаны к нижней и нижней правой части, не могут быть видны.

Кто-нибудь может посоветовать мне эту проблему?

С уважением, Eranga

Ответ 1

Установить AutoScroll = True В свойствах формы

Set AutoScroll = true on form

Ответ 2

например, предположим, что у нас есть панель, у которой есть id "panel1"
то мы можем применить в качестве

panel1.autoscroll=true;
panel1.BorderStyle = BorderStyle.FixedSingle;

чтобы установить ширину и высоту прокрутки

panel1.SetAutoScrollMargin(int x,int y);

Ответ 3

Это старый пост, но проблема продолжается, и связанные сообщения только продолжают поступать на SO!

Я делаю здесь некроповую проблему, а не рассматриваю более свежий вопрос только потому, что он приходит поверх моего google search

Вопрос прост: "почему не будут проклятые полосы прокрутки на моем ScrollableControl?"

Но не может быть конкретного, окончательного ответа. Потому что причиной являются легионы. Потому что независимо от того, появляются ли полосы прокрутки в элементе управления:

  • не только на собственные настройки свойств
  • но также и по состоянию его родительского контроля
  • а также состояния любых дочерних элементов управления.

Легко попасть в ловушку беспорядочно прокручивающихся значений до тех пор, пока корова не вернутся домой. Или идите в i/webs и надейтесь найти некоторые SO foos. Но о, дорогая. Вот несколько связанных сообщений SO с выдающимся разнообразием предлагаемых резолюций:

Горизонтальная полоса прокрутки не видна в DataGridView

Горизонтальная полоса прокрутки, которая не отображается в моем текстовом поле

Как установить полосу прокрутки в форме Windows

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

Прокручиваемая форма в С#, AutoScroll = true не работает

Как получить полосу прокрутки в панели в VB.Net?

Есть экраны страниц свойств VS-designer (например, здесь) и даже некоторые экстремальные решения на основе кода... мои избранные:

Добавить вертикальную полосу прокрутки на панель в .NET

как добавить элемент управления Vscroll для формирования в Visualbasic.net?

/sighs/


Общий ответ

.. в виде минимального решения github, чтобы изучить некоторые из voodo-ов прокрутки .NET:

https://github.com/violet313/TestWinForms/tree/Test1-Body-Panel

Это решение Visual Studio 2015 с использованием .NET4.52 framework.

В решении я пытаюсь создать форму, которая реагирует на некоторые динамические текстовые данные, которые должны отображаться. вот основная планировка, которую я в конечном итоге ищу:

--------------------------------------------------
|      fixed-size form header       |            | 
------------------------------------|   side     |
|                                   |   panel    |
|      dynamic content panel        |   stuff    |
|                                   |            |
--------------------------------------------------
|      fixed-size form trailer                   |               
--------------------------------------------------

Мне нужна форма:

  • не может быть изменен пользователем
  • ответьте на динамический контент:

    • сокращается как можно меньше до минимального размера формы.
    • рост до заданного максимального размера формы; и последующее предоставление соответствующих полос прокрутки на панели динамического содержимого.

Захватите его, пройдите каждый из (только 9, начиная с 95dccc5), и затем проверьте свои требования разумным и инкрементным образом. не забудьте разветкиться, когда вы делаете сомнительное изменение состояния.

Irl: может быть, я толстый, но мне потребовалось более часа, читая MSDN, пытающиеся (и не сумев) выяснить, какие непредвиденные обстоятельства контроля формы .NET. делая структурированную пробную и ошибку, таким образом, мне потребовалось всего 20 минут, чтобы получить то, что я хотел.


y~bwc

Я знаю, что это здесь yeaz ~, но кто заботится?, но я должен был получить, если бы с моей груди. heh:

 гррр. необходимость отменить ответ и ответить на этот вопрос возникает из моей потребности в  выгодно взять на себя контрактную работу Microsoft. кассиры могут быть  относительно (от разработчика pov) нетехнических и, прочитав лоты  включая слова: быстрый, простой, прямой, безопасный,  и т.д., уходят с впечатлением, что вещи .NETish - это прогулка в  парк. Моя проблема заключается в том, что у меня тогда возникнут трудности  пытаясь разумно объяснить, почему им, возможно, придется заплатить мне за n-дневный  стоит того, чтобы получить простую полосу прокрутки, которая появится на  отзывчивая форма.  

 По этому поводу я так и не добрался. лол. я провел несколько часов  пробираясь в MSDN blahs, пытаясь добиться этого. а затем зевнул,  отказались и продвинулись с прагматичной реализацией. который был  принято. но теперь это w/end, и я дурак, который не может позволить  вещи будут.

Ответ 4

Я читал эту страницу и могу сказать, что она обеспечивает точное и простое решение вашей проблемы!

Я проверил это, и это работало хорошо для меня.

Инструкция:

  1. Добавьте файл манифеста в свой проект (ПроектНовый элемент → Выберите тип манифеста)
  2. Добавьте следующий XML в ваш app.manifest (может быть другое имя):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
   <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
             <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
   </asmv3:application>
</assembly>
  1. Добавьте следующий код С# в класс, где вы вызываете компонент initialize (InitializeComponent();)
[DllImport("shcore.dll")]
static extern int SetProcessDpiAwareness(_Process_DPI_Awareness value);

enum _Process_DPI_Awareness
{
    Process_DPI_Unaware = 0,
    Process_System_DPI_Aware = 1,
    Process_Per_Monitor_DPI_Aware = 2
}
  1. Теперь просто добавьте эту строку кода над методом инициализации компонента (по умолчанию InitializeComponent();)
SetProcessDpiAwareness(_Process_DPI_Awareness.Process_DPI_Unaware);