明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2685|回复: 10

挑战很有趣当然也很难的一个问题吧

[复制链接]
发表于 2003-11-17 11:20:00 | 显示全部楼层 |阅读模式
本人定义了一个[U]公共类型[/U]的[U]动态[/U]的[U]控件[/U]数组(定义如:public x() as control)用来保存动态生成的控件,而且这些控件需要在一个窗体上两次生成,第一次生成的存在数组的前面,第二次生成的按序接着往下存。
在另一个模块中本人要调用这些动态生成的控件的某些属性,可是出错了:自动化错误!
问题:为什么无法调用这些已经动态生成的控件的属性呢?????

我说清楚了吗?
 楼主| 发表于 2003-11-17 11:22:00 | 显示全部楼层
其实即使不在另一个模块中调用这些动态生成的控件的属性,就是在当前窗体的模块中调用[U]上次[/U]生成的控件的属性也会出现:自动化错误!!!
why??????
 楼主| 发表于 2003-11-17 11:26:00 | 显示全部楼层
你能明白吗?
不明白我说什么???
没关系,你有兴趣的话,你就问吧,我会说得更细些的

发表于 2003-11-17 12:01:00 | 显示全部楼层
控件的名称在一个窗体上是唯一的,第二次生成时名称已经存在,当然出错了。
 楼主| 发表于 2003-11-17 14:06:00 | 显示全部楼层
本帖最后由 作者 于 2003-11-17 15:14:20 编辑

不是生成控件时出错,是在生成控件调用该控件的属性会出错!

在momain模块中我定义:public x() as control
           public number as integer
在窗体sb中我动态生成控件,在窗体声明部分dim startvalue as integer'用来保留number的初值
           1、1、在sb窗体初始化时:startvalue=number+1'也就是添加控件时,设置数组的指针,从哪个开始
      redim preserve x(0 to number) as control '重设数组,并保留原值,其中number是要变的
      2、dim xtop(0 to 50) as integer
     xtop(0)=100
              for i=startvalue to number
         
               Set newcontrol = Controls.Add"Forms.Label.1")        
               newcontrol.Height = 20
               newcontrol.Left = 100
               newcontrol.top = x(i- 1) + 20
               x(i) = newcontrol.top
               newcontrol.Width = 60
               newcontrol.Caption = "  " + CStr(i) + "  "
               Set x(i) = newcontrol
               next i
在其它模块中重设number的值,再一次让sb.show,再重复上面的3个步骤,当然这一次的number是比第一次的值大。

在又一个模块中,我想显示已经生成的控件的caption属性:
                  for i=1 to number
                         msgbox "控件的caption属性为:"&x(i).caption'错误就出在这里:自动化错误!这可怎么改呢?????
                  next i
发表于 2003-11-17 21:48:00 | 显示全部楼层
控件不是公共的,不能那样使用,只能隶属于某一个窗体。
它的对象类型应该是:窗体——控件,也就是在其它模块中,控件一定要先通过窗体才能引用。比如:sb.Label1,即窗体名称.控件名称。
在momain模块中最好定义一个保存控件的名称的数组,或者保存控件的索引位置的数组。
 楼主| 发表于 2003-11-18 16:23:00 | 显示全部楼层
楼上兄弟聪明!!!怪不得是版主呢!!!哈哈
谢谢啦!
本人也正是这样解决的,我要momain中定义了一个公共类型的数组,用来记录在别的窗体中生成的控件的某些属性(我需要的),效果很好!!
谢谢!!
 楼主| 发表于 2003-11-18 16:28:00 | 显示全部楼层
就这个问题我有几点收获:
           1、动态生成的控件可以定义成public型
           2、但是没有意义,因为你在把该窗体unload时,内存被释放,所以动态生成的控件也被释放掉了,所以你也就访问不到了!!
 楼主| 发表于 2003-11-18 16:31:00 | 显示全部楼层
体会说完了,但是我还想跟各位兄弟讨论一个问题,下面这段文字什么意思
    下面的语法将返回在设计阶段添加的控件的 Text 属性。
                             userform1.thebox.text
        若在运行时(什么意思????)添加一个控件,必须用惊叹号(什么意思???)语法引用该控件的属性。例如,返回在运行时添加的控件的 Text 属性,用下面的语法:
                            userform1!thebox.text
  
发表于 2003-11-18 19:23:00 | 显示全部楼层
程序还没启动时,是设计阶段,这时可以往窗体上拖动控件。而程序启动之后,属于运行状态。添加控件只能通过程序来实现。
“.”与"!"的区别,好象网上有些介绍它们的资料,一时找不到了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 13:44 , Processed in 0.187154 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表