VB按比例改变自身控件大小
答案:3 悬赏:30
解决时间 2021-04-28 06:21
- 提问者网友:傲气稳全场
- 2021-04-27 13:48
RT
最佳答案
- 二级知识专家网友:一起来看看吧
- 2021-04-27 13:56
Option Explicit
Private FormOldWidth As Long
Private FormOldHeight As Long
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub
Public Sub ResizeForm(FormName As Form)
Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.ScaleWidth / FormOldWidth
ScaleY = FormName.ScaleHeight / FormOldHeight
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Next i
Next Obj
On Error GoTo 0
End Sub
Private Sub Form_Load()
Call ResizeInit(Me)
End Sub
Private Sub Form_Resize()
Call ResizeForm(Me)
End Sub
Private FormOldWidth As Long
Private FormOldHeight As Long
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub
Public Sub ResizeForm(FormName As Form)
Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.ScaleWidth / FormOldWidth
ScaleY = FormName.ScaleHeight / FormOldHeight
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Next i
Next Obj
On Error GoTo 0
End Sub
Private Sub Form_Load()
Call ResizeInit(Me)
End Sub
Private Sub Form_Resize()
Call ResizeForm(Me)
End Sub
全部回答
- 1楼网友:樣嘚尐年
- 2021-04-27 15:58
改变Form1上控件大小,宽放大m倍,高放大n倍
Private Sub fangda()
Dim myControl As Control
Dim m As Single, n As Single
m = 1.5
n = 1.2
For Each myControl In Form1.Controls
myControl.Move myControl.Left, myControl.Top, myControl.Width * m, myControl.Height * n
Next
End Sub
- 2楼网友:一个很哇塞的汉子
- 2021-04-27 14:37
可以用窗体的resize事件来实现,改变窗体大小时,控件大小跟窗体成比例,不过如果最小化的时候就会出错,所以还得把最小化的事件给去了,代码如下:
private sub form_resize()
if me.windowstate <> 1 then '如果不是最小化
command1.width = me.width / 5 '按钮宽度是窗体的1/5
command1.height = me.height / 5 '按钮高度是窗体的1/5
end if
end sub
参数可以自己设定,其它的也是如此,细节还得自己弄了,如果想让控件居中可以这样:
private sub form_resize()
if me.windowstate <> 1 then '如果不是最小化
command1.width = me.width / 5 '按钮宽度是窗体的1/5
command1.height = me.height / 5 '按钮高度是窗体的1/5
command1.left = (me.width - command1.width) / 2 '按钮左边
command1.top = (me.height - command1.height) / 2 '按钮顶边
end if
end sub
这样就可以随窗体改变而改变了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息