有没有更好的写法!爱钻牛角尖得来!

Neoking 2003-11-07 03:55:30
我想实现在主窗口缩放时实现所有控件跟着同比缩放!
我不想一个一个的实现,有没有跟好的简单写法!
谢谢阿!
...全文
26 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
eyecao 2003-11-07
  • 打赏
  • 举报
回复
在窗体上分别添加 Lable、TextBox 和 CommandButton 这三个控件,以作演示:

Private frmWidth As Integer '保存窗体变化前的宽度
Private frmHeight As Integer '保存窗体变化前的高度

Private Sub Form_Load()

frmWidth = Me.Width
frmHeight = Me.Height

End Sub

Private Sub Form_Resize()

Dim oControl As Control
Dim frm1 As Double
Dim frm2 As Double

frm1 = Me.Width / frmWidth '计算窗体变化前后的比例
frm2 = Me.Height / frmHeight

For Each oControl In Me.Controls

If TypeOf oControl Is Control Then

oControl.Width = oControl.Width * frm1 '调整各个控件的大小
oControl.Height = oControl.Height * frm2

oControl.Left = oControl.Left * frm1 '调整各个控件变化后的坐标变化
oControl.Top = oControl.Top * frm2

End If

Next

frmWidth = Me.Width
frmHeight = Me.Height

End Sub

各位大侠认为这样如何? 敬请指教!
houwei 2003-11-07
  • 打赏
  • 举报
回复
Private Sub Form_Resize()
Static lngWidth As Long
Static lngHeight As Long
Dim ratex As Single
Dim ratey As Single
If lngWidth = 0 Or lngHeight = 0 Then
lngWidth = Me.Width
lngHeight = Me.Height
Else
ratex = lngWidth / Me.Width
ratey = lngHeight / Me.Height
If ratex > 0.1 And ratey > 0.1 And Me.WindowState <> 1 Then
lngWidth = Me.Width
lngHeight = Me.Height
resizeControl Me, ratex, ratey
End If
End If


End Sub


Private Sub resizeControl(resizeForm As Form, ByVal ratex As Single, ByVal ratey As Single)
Dim ctr As Control
On Error Resume Next
For Each ctr In resizeForm.Controls
ctr.Left = ctr.Left / ratex
ctr.Top = ctr.Top / ratey
ctr.Width = ctr.Width / ratex
ctr.Height = ctr.Height / ratey
Next
End Sub
还要再考虑窗体的最小值,否则是不能还原的。
  • 打赏
  • 举报
回复
楼上的,经典!
Neoking 2003-11-07
  • 打赏
  • 举报
回复
哦!谢谢!
我是想做成winamp的那种效果!谢谢了
victorycyz 2003-11-07
  • 打赏
  • 举报
回复
for each control in form
...
next

是要电脑去一个一个的做的事情,并不是要你自己去做。
strongfisher 2003-11-07
  • 打赏
  • 举报
回复
找控件

7,771

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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