2017-01-05 63 views
-3

我有几个表单有一些复杂的控件排列(用C#编写)。我希望能够调整包含表单的窗口(运行时),并让表单的内容都按比例改变大小并保持它们的相对位置。当窗口调整大小时,Windows窗体是否可以按比例调整其所有内容的大小?

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

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

感谢

+0

你在说C#/ Winforms吗?你的问题有点不清楚,并没有显示任何代码。 –

+0

对于比花生更复杂的任何东西,您可能需要合并[TableLayoutPanel](https://msdn.microsoft.com/en-us/library/h21wykkx(v = vs.110).aspx)容器。 –

+0

@Ransom你想看什么代码? – Sam

回答

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

相关问题