首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • vb程序,界面不是用form做的,而是把所有控件都放在UserControl里了,怎么读到在UserControl里的控件数和所有控件 [已结贴,结贴人:callwolf]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-11 10:53:31 楼主
    我现在想在改变分辨率时同时调整UserControl里控件的位置和大小
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • toury
    • 等级:
    发表于:2007-11-11 10:59:311楼 得分:5
    VBScript code
    '访问控件集合 Dim ctr As Control For Each ctr In Controls Debug.Print ctr.Name Next
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-14 09:39:242楼 得分:0
    如果我想写在一个公共过程里,这样以后都可以调用,该怎么定义这个过程,参数该怎么设置,怎么在过程里读到UserControl里的控件
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-14 10:00:553楼 得分:5
    VBScript code
    '在UserControl中添加以下属性 Public Property Get Controls() As Object Set Controls = UserControl.Controls End Property '就可以在窗体上进行遍历 Private Sub Command1_Click() Dim ctl As Control For Each ctl In UserControl11.Controls Debug.Print ctl.Name Next End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-14 16:30:524楼 得分:0
    多谢楼上的回答,现在我有多个UserControl
    我定义了一个公共过程:

    Private nFormHeight            As Integer
    Private nFormWidth            As Integer
    Private nNumOfControls        As Integer

    public Sub InitCtrl(ctl as UserControl)
          nFormHeight = ctl.height
          nFormWidth = ctl.Width
          nNumOfControls = ctl.Controls.count - 1

          For Each ctl In ctl.Controls
            Debug.Print ctl.name
          Next
    End Sub

    然后我在其他地方调用:
    Call InitCtrl(U0801_01)
    U080101是其中一个UserControl,这样在处理多个UserControl时,只需要把名字做参数带进过程就行了,不过现在运行提示:U0801_01变量未定义,现在U0801_01并没有被当成UserControl控件,而是一个字符串,该怎么定义这个参数呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 08:39:145楼 得分:0
    InitCtrl(Form1.U0801_01),只有在当前窗体内的代码才可以省略窗体变量名Form1。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 16:07:116楼 得分:0
    我的U080101现在不是放在form里,而是又放在了一个UserControl里面,就是说UserControl里面又嵌套了一个UserControl
    外面的叫CtlSpace,这上面包含了多个控件,U0801_01是它当中的一个控件
    现在可以在CtlSpace读到U0801_01,把它当成了一个控件,可是我现在想读U0801_01中的控件

    目前是循环CtlSpace中的控件,当读到U0801_01时,调用 public Sub InitCtrl(ctl as Control)  (4楼的问题我把参数改为Control就可以了)

    4楼的公共过程第三行 nNumOfControls  =  ctl.Controls.count  -  1 出错,说不支持这个属性
    没有嵌套时可以正常实现,当嵌套时里层的UserControl被当作一个控件,在它上面的控件就读不出来了
    晕啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 16:45:307楼 得分:10
    给所有内含控件的UserControl添加一个DoInitCtrl方法。
    在Form1中调用CtlSpace.DoInitCtrl(),其它控件调用InitCtrl(ctl);
    而在CtlSpace.DoInitCtrl()中又调用U0801_01.DoInitCtrl(),其它控件调用InitCtrl(ctl);
    U0801_01.DoInitCtrl()中对内含控件调用InitCtrl(ctl)。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-20 09:44:568楼 得分:0
    找了个控件resize32.ocx,UserControl里还不能用,看来只能写代码了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 10:10:339楼 得分:0
    resize32.ocx跟我想要得到的结果还不一样,这个是在拖动窗体改变大小时来实现的
    而我现在的窗体是不能改变大小的,只是需要通过改变机器分辨率,来自动适应分辨率的
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved