Ответ 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 - внешний вид. Вы получаете очень странное поведение, если одновременно используете оба метода калибровки. Обычно не полезно.