| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11035 人关注过本帖
标题:动态创建控件数组、及创建的控件数组响应事件
只看楼主 加入收藏
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
收藏
得分:0 
以下是引用不说也罢在2016-11-10 21:31:24的发言:

那我无法帮到你了,现在没有VB6环境。不过也给你处理了一个小问题。

感谢帮助。十分感谢!
2016-11-10 21:32
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
题主可以试着注销掉“Set optadd(i) = opt_Frm.Controls.Add("vb.optionbutton", opt_nm)”这句,这是动态控件的方法,和控件数组还是有区别的:控件数组是在设计时建立,软件运行时控件已经存在,而动态控件是软件运行时原本没有,通过程序动态建立,动态控件的事件响应还需要进行WithEvents声明,象你这句实际上创建了opt_nm变量设定的名称的控件,不是“optadd”这个名称了。

另回复xss_wl版主:你完全可以自己建立一个同名的excel模拟的,应该数据不重要。我常这样做的。
哎,现正在外面实习,没有调试环境,对题主的问题暂时没法给出正确解答!
2016-11-11 11:03
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
收藏
得分:0 
以下是引用风吹过b在2016-11-10 12:53:28的发言:

因你的工作未带一个测试用的 XLS 文件 ,所以整个工程都无法调试。
概念,控件数组,最少有一个元素在设计阶段已确定的,然后其他元素复制这个元素的实例。
     控件数组,不能在运行时直接创建一个原先不存在的控件数组
 
在这里面
Public optadd() As OptionButton  '查询后增加控件变量  违反了定义
 
其次,控件数组的添加,
不能这样        Set optadd(i) = opt_Frm.Controls.Add("vb.optionbutton", optadd(i)) '添加一个按钮 Public optadd As OptionButton
而应使用  Load Object (Index As Integer) 命令进行添加。
 
----------------
那么改?
首先,你应该放一个 下标为0 的元素,设置为隐藏。其他属性都设置好来。
 
使用时:
先 清掉除0下标外的所有的元素
for each obj in optadd
  if obj.index>0 then  
     unload obj
  end if
next
 
然后再根据你的需要添加
load optadd(i)
再接着就是移动位置
 
        optadd(i).Move 200 + opt_w * 2000, (i - opt_w * 30) * 400, 2000, 375 'object.move left,top,width,height left距离左边, top距离顶端,  width新宽度, height新高度
        optadd(i).Caption = opt_nm '命名
        optadd(i).Visible = True    ' 可见
 
这三句,不是每个对象都设置,而是程序设计模式直接设置好 下标为0 的元素的属性,或者在代码中指定 下标为0 元素的属性。
这样每次加载时,就会把这个属性复制过去。
'        optadd(i).Font = "宋体"
'        optadd(i).FontBold = True
'        optadd(i).FontSize = 12
 
 

@风吹过b
十分感谢帮助,按照您的办法,已测试成功。
开始测试不成功问题出在:
 For Each obj In opt_Frm.optadd
Load opt_Frm.optadd(i)
没加红色字体部分。
2016-11-11 11:26
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
收藏
得分:0 
以下是引用xzlxzlxzl在2016-11-11 11:03:06的发言:

题主可以试着注销掉“Set optadd(i) = opt_Frm.Controls.Add("vb.optionbutton", opt_nm)”这句,这是动态控件的方法,和控件数组还是有区别的:控件数组是在设计时建立,软件运行时控件已经存在,而动态控件是软件运行时原本没有,通过程序动态建立,动态控件的事件响应还需要进行WithEvents声明,象你这句实际上创建了opt_nm变量设定的名称的控件,不是“optadd”这个名称了。
 
另回复xss_wl版主:你完全可以自己建立一个同名的excel模拟的,应该数据不重要。我常这样做的。
哎,现正在外面实习,没有调试环境,对题主的问题暂时没法给出正确解答!
已按照  风大哥  的方法测试成功。
感谢楼上、以及楼上的楼上……,感谢帮助我大神们。

2016-11-11 11:28
sswwxx123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-11-15
收藏
得分:0 
以下是引用xss_wl在2016-11-10 17:42:06的发言:

模拟?他的整个程序就是围绕这个Excel文件展开的,你什么内容都不知道,怎么模拟?我十分愿意看到你模拟的结果。
我看了一下,认为楼上说的是对的,区分概念---控件的问题,与excel无关的
2016-11-15 22:10
快速回复:动态创建控件数组、及创建的控件数组响应事件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015107 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved