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

aycls 2015-04-27 09:45:20
全部代码如下,请老师看看怎么修改?
问题出在红色和绿色代码部分:子控件的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
...全文
265 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aycls 2015-04-28
  • 打赏
  • 举报
回复
谢谢您的热情指导! 这个代码放到usercontrol内是可以的。但作为模块无法调用。,其实我并非一定要用这段代码。只是想找到一个用户控件上能自适应的模块解决方案而已。有模块调用自然会方便许多。 有没有别的能够在usercontrol上调用的自适应模块代码?
Tiger_Zhao 2015-04-28
  • 打赏
  • 举报
回复
不要做“怎么让我的小轿车运集装箱?”这种事!
前个帖子就回答你了,
1)窗体和控件是不同的,你先把两者的区别搞清楚了就知道为什么不支持调用。
2)一个自定义控件内的布局,专门写几行调整的代码也比你这种“通用”方法简单多了。

更何况你的代码一点也不通用,本身就是烂代码,怎么改好!
谁给你的就请谁去改。
vansoft 2015-04-28
  • 打赏
  • 举报
回复
自适应并不是简单地把窗体上的控件等比例放大。
aycls 2015-04-27
  • 打赏
  • 举报
回复
'在调用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

1,451

社区成员

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

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