我需要在usercontrol中调用自适应窗口大小的模块,但是不知道() 中的参数怎样写,就是下面代码中的红色部分应该怎样写?请高手指教!
模块中:
Public Sub ResizeInit(FormName As Form)
..............
End sub
Public Sub ResizeForm(FormName As Form)
..............
End sub
US1 中:
Private Sub UserControl_Initialize()
Call ResizeInit(Me)
End Sub
Private Sub UserControl_Resize()
Call ResizeForm(Me)
End Sub
...全文
32811打赏收藏
vb6.0在usercontrol调用自适应窗口模块时()中的参数怎么写?
我需要在usercontrol中调用自适应窗口大小的模块,但是不知道() 中的参数怎样写,就是下面代码中的红色部分应该怎样写?请高手指教! 模块中: Public Sub ResizeInit(FormName As Form) .............. End sub Public Sub ResizeForm(FormName As Form) .............. End sub US1 中: Private Sub UserControl_Initialize() Call
非常感谢!但问题似乎与存活期关系不大吧?
把Call ResizeInit(UserControl.Extender)放在不同位置:
'位置一:
Private Sub UserControl_Initialize()
Call ResizeInit(UserControl.Extender)
End Sub
'这样不行,此时处在在控件加载之前,不在存活期内,因此不能获取控件及其子控件的属性值。
'位置二:
Private Sub UserControl_InitProperties()
Call s.ResizeInit(UserControl.Extender)
End Sub
‘这时可以获取以下属性值:
FormOldWidth = FormName.Width'宽高值都能获取,都能在立即窗口显示出来
FormOldHeight = FormName.Height
'这说明此时控件已经加载,已处于存活期这内!
’但既然已在存活期内,为什么却不能遍历其上的子控件,获取它们的属性值呢?
‘有解决这个问题的具体办法吗?
全部代码如下,请老师看看怎么修改?
问题在红色和绿色代码:子控件的4个属性无法写入obj.tag,去掉纠错语句on error resume next 运行时提示:对象不支持该属性或方法(绿色语句)
'模块中代码:
Option Explicit
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As VBControlExtender)
Dim Obj As Control
FormOldWidth = FormName.Width
FormOldHeight = FormName.Height
'On Error Resume Next
For Each Obj In FormName'在这里报错,说对象不支持该属性或方法
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "'记录不上这些属性值
debug.print obj.tag‘从立即窗口看:空值
Next Obj
On Error GoTo 0
End Sub
'按比例改变表单内各元件的大小,
'在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(FormName As VBControlExtender)
'Debug.Print FormName.Width, FormName.Height
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
If FormOldWidth <> 0 And FormOldHeight <> 0 Then
ScaleX = FormName.Width / FormOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.Height / FormOldHeight
End If
'保存窗体高度缩放比例
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
usercontrol中代码:
Private Sub UserControl_Initialize()
Call ResizeInit(UserControl.Extender)
End Sub
Private Sub UserControl_Resize()
Call ResizeForm(UserControl.Extender)
End Sub
全部代码如下,请老师看看怎么修改?
'模块中代码:
Option Explicit
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As VBControlExtender)
Dim Obj As Control
FormOldWidth = FormName.Width
FormOldHeight = FormName.Height
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
'按比例改变表单内各元件的大小,
'在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(FormName As VBControlExtender)
'Debug.Print FormName.Width, FormName.Height
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
If FormOldWidth <> 0 And FormOldHeight <> 0 Then
ScaleX = FormName.Width / FormOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.Height / FormOldHeight
End If
'保存窗体高度缩放比例
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
usercontrol中代码:
Private Sub UserControl_Initialize()
Call ResizeInit(UserControl.Extender)
End Sub
Private Sub UserControl_Resize()
Call ResizeForm(UserControl.Extender)
End Sub
谢谢教师指教!
但我按照您说的改了代码,仍然不行,当控件拖上窗体时即报错(红色部分)
Public Sub ResizeForm(FormName As VBControlExtender)
‘..................................
ScaleX = FormName.Width / FormOldWidth'报错“除数为0”
'保存窗体宽度缩放比例
ScaleY = FormName.Height / FormOldHeight
'保存窗体高度缩放比例
’.................................
End Sub
总之,怎样才能让用户控件中所有子控件自适应usercontrol呢?最好有个现成的模块!!!