关于MDI窗口控件随窗口大小改变

p_flag 2020-09-17 04:39:03
各位大侠好,我借助在网上找的如下代码实现控件随窗口大小改变功能,但是发现如下问题,向各位请教
我将如下代码放到每个mdi窗口中,已最大化方式打开第一个mdi窗口没问题,再已最大化方式打开第二个mdi窗口控件不能铺满,还是正常设计时候大小,关闭再打开也不好用,应该如何解决呢,谢谢
Private Sub setTag(ByVal obj As Object)
For Each con As Control In obj.Controls
con.Tag = con.Width & ":" & con.Height & ":" & con.Left & ":" & con.Top & ":" & con.Font.Size

'如果是容器控件,则递归继续纪录
If con.Controls.Count > 0 Then
setTag(con)
End If
Next
End Sub

'递归重新设定控件的大小和位置
Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)

For Each con As Control In obj.Controls
con.AutoSize = False
Dim mytag() As String = con.Tag.ToString.Split(":")
con.Width = mytag(0) * newx
con.Height = mytag(1) * newy
con.Left = mytag(2) * newx
con.Top = mytag(3) * newy

'计算字体缩放比例,缩放字体
Dim currentSize As Single = (mytag(1) * newy * mytag(4)) / mytag(1)
con.Font = New Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit)

'如果是容器控件,则递归继续缩放
If con.Controls.Count > 0 Then
setControls(newx, newy, con)
End If
Next
End Sub
Private Sub Form_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
Try
'得到现在窗体的大小,然后根据原始大小计算缩放比例
'MsgBox(CStr(Me.Width) & "-" & CStr(Me.Height))
Dim newx As Single = Me.Width / x
Dim newy As Single = Me.Height / y
setControls(newx, newy, Me)
Catch ex As Exception

End Try
End Sub
Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'控件随窗口大小调整
x = Me.Width
y = Me.Height
setTag(Me)
End Sub
...全文
9910 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧