vb6.0 自适应窗体模块怎样在usercontrol中调用?

时间:2022-09-06 11:45:47
全部代码如下,请老师看看怎么修改?
问题出在红色和绿色代码部分:子控件的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

4 个解决方案

#1


'在调用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

#2


不要做“怎么让我的小轿车运集装箱?”这种事!
前个帖子就回答你了,
1)窗体和控件是不同的,你先把两者的区别搞清楚了就知道为什么不支持调用。
2)一个自定义控件内的布局,专门写几行调整的代码也比你这种“通用”方法简单多了。

更何况你的代码一点也不通用,本身就是烂代码,怎么改好!
谁给你的就请谁去改。

#3


谢谢您的热情指导!
这个代码放到usercontrol内是可以的。但作为模块无法调用。,其实我并非一定要用这段代码。只是想找到一个用户控件上能自适应的模块解决方案而已。有模块调用自然会方便许多。
有没有别的能够在usercontrol上调用的自适应模块代码?

#4


自适应并不是简单地把窗体上的控件等比例放大。

#1


'在调用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

#2


不要做“怎么让我的小轿车运集装箱?”这种事!
前个帖子就回答你了,
1)窗体和控件是不同的,你先把两者的区别搞清楚了就知道为什么不支持调用。
2)一个自定义控件内的布局,专门写几行调整的代码也比你这种“通用”方法简单多了。

更何况你的代码一点也不通用,本身就是烂代码,怎么改好!
谁给你的就请谁去改。

#3


谢谢您的热情指导!
这个代码放到usercontrol内是可以的。但作为模块无法调用。,其实我并非一定要用这段代码。只是想找到一个用户控件上能自适应的模块解决方案而已。有模块调用自然会方便许多。
有没有别的能够在usercontrol上调用的自适应模块代码?

#4


自适应并不是简单地把窗体上的控件等比例放大。