我有一些形式有些复杂的控件(用C#编写)。我希望能够调整包含表单的窗口的大小(在运行时)并具有表单'内容都按比例改变大小并保持相对位置。
我做了很多搜索,发现很多人都在谈论使用锚属性,但这对我来说似乎并不适用。如果我锚定到所有边缘,控件会调整大小但开始相互重叠。我需要他们在表格上保持相对位置并变大/变小。
想象一下,在屏幕上调整一张照片(格式),这是我想要做的。最好的方法是什么?
由于
答案 0 :(得分:0)
我会处理您表单的Form.Paint
事件并调整/计算控件的大小和位置。这不是最干净或最简单的解决方案,所以如果可以,你真的应该尝试让其中一个内置的布局控件工作。
Private Sub MyForm_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
Try
'get height of title
Dim titleHeight As Integer = RectangleToScreen(parent.ClientRectangle).Top - parent.Top
'set paddingTop to height of title + height of menustrip(if you have one) + 10px(can be whatever you want) padding
Dim paddingTop As Integer = titleHeight + parent.MenuStrip1.Height + 10
REM Adjust controls sized to scale based on new form size
PictureBox1.Size = New Size(CInt(Width / 4), CInt(Height / 2))
PictureBox1.Location = New Point(CInt(Width / 4 + PictureBox1.Width / 2), paddingTop)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub
显然,你需要知道控件相对于父窗体的比例和位置,所以如果窗体的宽高比改变你的布局不会解开。您还应考虑为父表单设置最小大小以避免此类问题。您还可以处理Form.SizeChanged
以减少代码运行的次数,但我遇到的情况还不够。