Подтвердить что ты не робот

Изменение размера единого элемента управления в WinForms

Как я могу создать пользовательский интерфейс в С#/WinForms, который содержит несколько разных типов управления, так что только размер элемента управления ListView изменяется, если пользователь изменяет размер окна?

4b9b3361

Ответ 1

Существует два основных способа автоматического изменения размера элемента управления на основе изменений размера родительского контейнера (форма в вашем случае):

  • Задайте свойство Dock элемента управления DockStyle.Fill.
  • Установите свойство Anchor в "Верхний, нижний, левый, правый"

Используйте свойство Dock с Dock.Fill

Преимущество этого метода заключается в том, что он принимает весь элемент управления и сообщает ему всегда заполнять всю клиентскую область родительского контейнера (в вашем случае - клиентскую область формы). Это полезно, если вы хотите сделать что-то вроде заполнения формы с помощью ListControl или TreeView или что-то в этом роде. Но это не так полезно, если вы хотите масштабировать один элемент управления при использовании других элементов управления (как вы указываете, это ваша потребность). В этом случае вам необходимо установить свойство Dock на этих других элементах управления для DockStyle.Top или DockStyle.Bottom, чтобы они плавали выше или ниже основного элемента управления размером.

Это проблема, и она также ограничивает возможности компоновки других элементов управления. Вы можете уменьшить эту проблему, установив два элемента управления Panel, один вверху и другой в нижней части формы. Эти панели останутся в фиксированных позициях, а средняя область (с вашим контролем DockStyle.Fill) масштабируется с родительской формой. Затем вы можете помещать любые элементы управления в любую конфигурацию макета в те панели "header" и "footer".

Этот вид композитного формообразования с использованием стыковочных панелей невероятно мощный. Совершенно откровенно, это была игра, изменяющаяся в .NET, когда они представили это с помощью .NET 1.0 WinForms.

Используйте свойство Anchor с "Верхним, нижним, левым, правым"

Если все, что вы хотите сделать, это иметь один элемент управления в масштабе формы, в то время как другие остаются "застрявшими" по краям, используйте свойство Anchor. Для элементов управления, которые вы хотите сохранить вверху, установите для свойства Anchor значение "Вверх, Влево" (по умолчанию). Для элементов управления, которые вы хотите оставить внизу, установите для свойства Anchor значение "Bottom, Left". Для элементов управления, которые вы хотите увеличить по ширине с помощью формы/диалога (например, однострочного элемента управления текстовыми полями), установите для свойства "Якорь" значение "Влево", "Вправо" (и установите "Верх" или "Вниз" в зависимости от того, хотите ли вы двигаться как верх или изменяется нижняя часть диалогового окна.

И если вы хотите, чтобы элемент управления изменялся во всех направлениях с помощью формы, установите для свойства Anchor значение "Top, Left, Bottom, Right". Очень полезно для типа "основного управления", например, для доминантного списка, дерева или многострочного текстового поля.

Для чего вам не нужно взаимодействовать с AutoSize или AutoSizeMode... эти свойства управляют тем, как элемент управления изменяет размер на основе собственного содержимого, а не как он изменяет размер в зависимости от поведения его контейнера. Подумайте о режиме AutoSize/AutoSize как в обратном направлении, в то время как Anchor/Dock - внешний вид. Вы получаете очень странное поведение, если одновременно используете оба метода калибровки. Обычно не полезно.

Ответ 2

Соедините ListView со всеми четырьмя сторонами формы, а остальные элементы управления - до 2 или менее.

Ответ 3

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

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

Короче: именно то, что сказал Джеймс, за исключением того, что это "Якорь", а не свойство "Док". Док подобен, но не совсем то же самое.

Ответ 4

Если вы поместите ListView на одну панель SplitContainer и поместите остальные элементы управления на другую панель, вы можете ограничить рост второй панели, установив min и maxsize.

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

Ответ 5

Что делать, если у нас есть несколько элементов управления в форме?

Например: если форма используется для генерации некоторого результата в сетке по отношению к данным, введенным в пару текстовых полей или комбинированных полей и т.д.; И мы хотим, чтобы они изменяли размер/перестраивали соответственно и не перекрывали друг друга (как это бывает при использовании док-заливки), особенно с использованием сетки или аналогичного управления в контексте. alt text