Как изменить размер элементов формы при изменении размера окна?

У меня есть эта форма с элементом управления tab и списком внутри:

enter image description here

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

enter image description here

тем не менее, я действительно хотел, чтобы элемент управления tab и listbox изменяли размер, имея следующий результат:

enter image description here

Я считаю, что я мог бы достичь этого эффекта, просто отвечая на какой-то onResize() метод в форме, и сделать мои собственные расчеты чтобы вручную обновить размер элемента управления tab и списка соответственно.

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

знаете ли вы лучший способ достичь этого эффекта?

9 ответов


вот хороший учебник, в котором объясняется, как изменить размер элементов управления winform при изменении размера элемента управления формы контейнера с помощью свойств dock и anchor:

http://www.techrepublic.com/article/manage-winform-controls-using-the-anchor-and-dock-properties/6165908

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


вы можете использовать свойство anchor элемента управления tab -- просто закрепите все четыре стороны.


вы можете использовать свойство Dock как вкладки, так и списка для заполнения


Это может помочь:

Private Sub frmMain_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged 'tab container sizechanged event
        tabMain.Dock = DockStyle.None 'set dock to none to allow resize
        tabMain.Size = New Size(New Point(3, 3)) ' set size anything you want
        tabMain.Dock = DockStyle.Fill 'set dock to fill to fit to container
    End Sub

использовать Dock и Anchor свойства для управления изменением размера элемента управления компонента при изменении размера его родителя / контейнера.

произвести контроль заполнения контейнера, просто

theControl.Dock = System.Windows.Forms.DockStyle.Fill

чтобы сохранить некоторые поля, установите Anchor свойства

theControl.Anchor = CType((System.Windows.Forms.AnchorStyles.Top _
    Or System.Windows.Forms.AnchorStyles.Bottom _
    Or System.Windows.Forms.AnchorStyles.Left _
    Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)

эти свойства также можно задать в окне инструмента свойства.


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

И. Е: Установите свойство anchor в Top, Bottom, Left, Right это гарантирует, что верхний, нижний, левый, правый край элемента управления всегда будет одинаковым расстоянием от каждого края независимо размера родителей.

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

Если вы хотите, чтобы верхний и левый край элемента управления заблокировали 8 пикселей от верхнего и левого края родителя, установите свойство Anchor в Top, Left элемент управления никогда не изменит его размер, он всегда будет оставаться относительно расположенным на 8,8.


нажать на кнопку tab 1 или tab 2 затем на Property Tab искать Dock собственность. Выберите один в середине или введите полный.

или

вы можете искать Anchor и выберите bottom tab, the top tag на right tag и left tag.

Надеюсь, Это Помогло!


в событии загрузки формы можно использовать следующий код...

TabControl1.Dock = DockStyle.Fill
ListBox1.Dock = DockStyle.Fill

это изменит размер элементов управления при изменении размера формы.

вы также можете использовать панель tableLayout или свойство anchor элементов управления для достижения того же результата.

надеюсь, что это помогает!


Я много боролся с якорь и док так как у меня было много элементов управления из других библиотек, и некоторые из них не имели свойств якоря и дока, но эта техника помогла мне. Он динамически устанавливает размер всех элементов управления в WinForm, ссылаясь на него с помощью ширина и Высота свойство WinForm с помощью события Resize этой формы. В приведенном ниже примере кода имя формы Главный.

Dim CuRWidth As Integer = Me.Width
Dim CuRHeight As Integer = Me.Height

    Private Sub Main_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
            Dim RatioHeight As Double = (Me.Height - CuRHeight) / CuRHeight
            Dim RatioWidth As Double = (Me.Width - CuRWidth) / CuRWidth

            For Each ctrl As Control In Controls
                ctrl.Width += ctrl.Width * RatioWidth
                ctrl.Left += ctrl.Left * RatioWidth
                ctrl.Top += ctrl.Top * RatioHeight
                ctrl.Height += ctrl.Height * RatioHeight
            Next

            CuRHeight = Me.Height
            CuRWidth = Me.Width
End Sub

источник:https://www.youtube.com/watch?v=QVi1ve5qHXA