Afterload事件
vars("width") = e.Form.width
vars("height") = e.Form.height
SizeChanged事件
For Each c As Winform.Control In e.Form.Controls
c.Left = c.Left * (e.Form.Width / vars("width"))
c.Top = c.Top * (e.Form.Height / vars("height"))
c.Width = c.Width * (e.Form.Width / vars("width"))
c.Height = c.Height * (e.Form.Height / vars("height"))
Next
msgbox(e.Form.Height / vars("height"))
vars("width") = e.Form.width
vars("height") = e.Form.height
但是这个代码有很对弊端,从原始大小再到最大化基本没有问题,但是从最大化之后再恢复大小,很多空间的大小或者位置就变化了。例如你之前发的一个例子,我换成上述代码,变形自后,button按钮明显变形了
此主题相关图片如下:截图.png
比如,我用的窗口
此主题相关图片如下:界面.png
在原始大小界面,把A窗口放大到最大,然后再在放大的界面下切换到B窗口,这个时候B窗口显示的内容坐标比较乱,有的 时候就不是左上角(0,0)开始。
你的这种方案对窗口里面的Button按钮的大小进行了设置,
Dim Button1 As WinForm.Button = e.Form.Controls("Button1")
If img.width / img.height >= PictureBox1.Width / PictureBox1.Height Then
rate = PictureBox1.Width / width
width = PictureBox1.Width
height = height*rate
Button1.Left = Vars("left")*rate
Button1.Top = Vars("top")*rate +(PictureBox1.Height - height)/2
Else
rate = PictureBox1.Height / height
height = PictureBox1.Height
width = width * rate
Button1.Top = Vars("top")*rate
Button1.Left = Vars("left")*rate+(PictureBox1.Width - width)/2
End If
如果我要设计2楼这样的中国地图,窗口里面有多个Lable标签,要想实现窗口和标签放大了也能一一标注,位置准确,那么我得每一个Lable都加一个这样得代码吧?