vb6.0在usercontrol调用自适应窗口模块时()中的参数怎么写?

aycls 2015-04-17 08:47:34
我需要在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
...全文
328 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-04-28
  • 打赏
  • 举报
回复
帮助:理解控件的存活期和关键事件
aycls 2015-04-27
  • 打赏
  • 举报
回复
非常感谢!但问题似乎与存活期关系不大吧? 把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 '这说明此时控件已经加载,已处于存活期这内! ’但既然已在存活期内,为什么却不能遍历其上的子控件,获取它们的属性值呢? ‘有解决这个问题的具体办法吗?
Tiger_Zhao 2015-04-27
  • 打赏
  • 举报
回复
UserControl和Form不一样的!
自己去看帮助:UserControl 对象的存活期
aycls 2015-04-27
  • 打赏
  • 举报
回复
全部代码如下,请老师看看怎么修改? 问题在红色和绿色代码:子控件的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
Tiger_Zhao 2015-04-27
  • 打赏
  • 举报
回复
模块中定义 FormOldWidth、FormOldHeight?
整个工程只能处理一个容器?
这样的“通用”代码也醉了!
为什么不直接在 UserControl 中处理?
aycls 2015-04-26
  • 打赏
  • 举报
回复
全部代码如下,请老师看看怎么修改? '模块中代码: 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
aycls 2015-04-26
  • 打赏
  • 举报
回复
再次试验: FormName.Width 获取到了 但FormOldWidth仍无法获取 因此ScaleX = FormName.Width / FormOldWidth还是出不来 请您再帮助改一下!!!
aycls 2015-04-26
  • 打赏
  • 举报
回复
谢谢教师指教! 但我按照您说的改了代码,仍然不行,当控件拖上窗体时即报错(红色部分) Public Sub ResizeForm(FormName As VBControlExtender) ‘.................................. ScaleX = FormName.Width / FormOldWidth'报错“除数为0” '保存窗体宽度缩放比例 ScaleY = FormName.Height / FormOldHeight '保存窗体高度缩放比例 ’................................. End Sub 总之,怎样才能让用户控件中所有子控件自适应usercontrol呢?最好有个现成的模块!!!
Tiger_Zhao 2015-04-20
  • 打赏
  • 举报
回复
Public Sub ResizeForm(FormName As VBControlExtender)
Debug.Print FormName.Width, FormName.Height
End Sub

Private Sub UserControl_Resize()
Call ResizeForm(UserControl.Extender)
End Sub

窗体设计状态是不运行代码的;而自定义控件在设计状态(拖放到窗体上后)是运行代码的,远比窗体复杂。
不是所有的代码都“通用”的。
Tiger_Zhao 2015-04-17
  • 打赏
  • 举报
回复
你模块的两个函数只适合Form啊,怎么能用到UserControl中呢?类型根本不一致啊!
aycls 2015-04-17
  • 打赏
  • 举报
回复
我在调用标准模块中的变量、过程、函数时,把form改成usercontrol,很正常。但是在调用自适应模块时就不行了。问题在计算ScaleX的值需要获取usercontrol.width,就报错,说usercontrol未定义,改成usercontrol1也不行。usercontrol.width 在form1中获取很正常,怎么在usercontrol中就无法获取了?这个问题該如何解决呢?

1,451

社区成员

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

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