在调整窗口大小时,Windows窗体是否可以按比例调整其所有内容的大小?

时间:2017-01-05 01:42:11

标签: windows forms

我有一些形式有些复杂的控件(用C#编写)。我希望能够调整包含表单的窗口的大小(在运行时)并具有表单'内容都按比例改变大小并保持相对位置。

我做了很多搜索,发现很多人都在谈论使用锚属性,但这对我来说似乎并不适用。如果我锚定到所有边缘,控件会调整大小但开始相互重叠。我需要他们在表格上保持相对位置并变大/变小。

想象一下,在屏幕上调整一张照片(格式),这是我想要做的。最好的方法是什么?

由于

1 个答案:

答案 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以减少代码运行的次数,但我遇到的情况还不够。