我有这个表单,里面有一个制表符控件和一个列表框:
当我调整窗口高度时,我会得到这样的结果:
但是,我实际上希望选项卡控件和列表框可以调整大小,具有以下结果:
我相信我可以通过在表单中响应某种onResize()
方法来实现这种效果,并自己进行计算以相应地手动更新选项卡控件和列表框的大小。
但是,我已经看到很多应用程序实现了这种效果,所以我怀疑实际上有更好的方法 - 也许是内置功能。
你知道更好的方法来达到这个效果吗?
这是一个很好的教程,解释了如何在使用dock和anchor属性调整容器表单控件的大小时调整winform控件的大小:
设置锚属性的四个值(顶部,右侧,底部,左侧),即使重新调整大小,也可以使控件的边缘相对于Form控件保持静止。
您可以使用选项卡控件的anchor属性 - 只需锚定所有四个边。
您可以使用Of Tab和列表框的Dock属性进行填充
要获得所需的结果,请将控件放在标准尺寸表单中。然后使用Anchor属性为Top,Bottom,Left,Right。这允许您指定始终希望控件在基于最小大小的表单中相对定位。
I.E:将锚属性设置为顶部,底部,左侧,右侧,这将确保控件的顶部,底部,左侧,右侧边缘始终与每条边的距离相同,而与父项大小无关。
如果您希望控件放置在距离控制面的每个边缘一定距离处,请使用“锚定顶部”,“底部”,“左侧”,“右侧”
如果你想让控制顶部和左边缘从父级的顶部和左边缘锁定8个像素,将“锚点属性”设置为“顶部”,左侧控件将永远不会调整大小,它将始终保持相对位于8,8。
这可能有所帮助:
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)
您还可以在“属性”工具窗口中设置这些属性。
点击tab 1
或tab 2
然后在Property Tab
的一侧寻找Dock
财产。然后选择中间的那个或键入full。
要么
你可以寻找Anchor
并选择bottom tab
,top tag
,right tag
和left tag
。
希望这有帮助!
您可以在表单加载事件中使用以下代码...
TabControl1.Dock = DockStyle.Fill
ListBox1.Dock = DockStyle.Fill
这将调整窗体大小时的控件大小。
您还可以使用表格布局面板或控件的锚属性来实现相同的结果。
希望这可以帮助!
因为我有很多来自其他图书馆的控件,而且其中一些没有锚和底座属性,所以我在锚和底座上挣扎了很多,但这种技术对我有所帮助。它通过使用该窗体的Resize事件使用WinForm的width和Height属性引用它来动态设置WinForm中所有控件的大小。在下面的代码示例中,表单名称为Main。
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