| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10790 人关注过本帖
标题:动态创建控件数组、及创建的控件数组响应事件
只看楼主 加入收藏
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:24 
动态创建控件数组、及创建的控件数组响应事件
动态创建控件数组、及创建的控件数组响应事件
环境说明:
1、有三、个窗体。窗体1(find_Frm)/窗体2(opt_Frm)/ 窗体3(print_Frm)
2、find_Frm有按钮,命名为find2_cmd。opt_Frm有optionbutton,命名为optadd(0)
3、要求按find2_cmd以后,在opt_Frm上创建多个optionbutton控件数组optadd(a),且显示窗体2
4、点击optadd(a)任意一个,在窗体3(print_Frm)上显示数据内容。
——————————————————————————————————————
find_frm下 find2_cmd 部分代码如下(a已经赋值)
——————————————————————
    opt_Frm.Show
    ReDim optadd(a)
    For i = 1 To a
    opt_w = Int(i / 30)     
        opt_nm = find2(i) & find1(i)
        Set optadd(i) = opt_Frm.Controls.Add("vb.optionbutton", opt_nm)
        Load opt_Frm.optadd(i)
        optadd(i).Move 200 + opt_w * 2000, (i - opt_w * 30) * 400, 2000, 375
        optadd(i).Caption = opt_nm
        optadd(i).Visible = True   
        optadd(i).Font = "宋体"
        optadd(i).FontBold = True
        optadd(i).FontSize = 12
    Next i
   ————————————————————————————
opt_frm  下代码(r/w已赋值)
Private Sub optadd_Click(Index As Integer)
    ReDim opt_all(w)
        If optadd(Index).Value = True Then
            For j = 1 To r
                opt_temp = xlSheet.Cells(i, 1)
                If opt_temp = find1(Index) Then
                    For k = 1 To w
                        opt_all(k) = opt_all(k) + xlSheet.Cells(1, k) & ":" & xlSheet.Cells(j, k) & Chr(13) & Chr(13)
                    Next k
                End If
            Next j
        End If
    print_Frm.Show
    print_Frm.Print opt_all(k)
End Sub
 ————————————————————————————
问题:在窗体opt_Frm上可以创建出多个optionbutton控件,但对点击optadd(1 to a)无法做出响应。仅仅对optadd(0)有响应。
百思不得其解,VB小小白,求大神帮助。
搜索更多相关主题的帖子: 动态 命名 
2016-11-09 20:53
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
收藏
得分:0 
好像问题出在这里
Set optadd(i) = opt_Frm.Controls.Add("vb.optionbutton", opt_nm)
opt_nm 是个变量,创建的不是控件数组。
可不知道怎么改。
5555555
2016-11-09 23:32
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:0 
别急,有时间我给你弄一下。不过在这之前请你把你的工程文件发上来,你上面描述的不好理解。

[此贴子已经被作者于2016-11-10 10:30编辑过]

2016-11-10 10:09
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
收藏
得分:0 
以下是引用xss_wl在2016-11-10 10:09:58的发言:

别急,有时间我给你弄一下。不过在这之前请你把你的工程文件发上来,你上面描述的不好理解。
人员资质查询.rar (242.8 KB)

辛苦了。我百度了很久都没解决,还得版主帮助。
2016-11-10 11:28
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:10 
因你的工作未带一个测试用的 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



授人于鱼,不如授人于渔
早已停用QQ了
2016-11-10 12:53
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:0 
以下是引用ami1999在2016-11-10 11:28:29的发言:


辛苦了。我百度了很久都没解决,还得版主帮助。

把你的工程文件发上来,我直接在你的工程里面给你修改。
2016-11-10 13:12
ami1999
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-5-14
收藏
得分:0 
以下是引用xss_wl在2016-11-10 13:12:11的发言:

 
把你的工程文件发上来,我直接在你的工程里面给你修改。

这个是所有的文件,包含表格的
人员资质查询-含表格.rar (280.21 KB)
2016-11-10 14:05
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:0 
回复 7楼 ami1999
你的工程文件里没有包含代码中需要使用的那个"维修厂人员资质情况总表.xls"文件
图片附件: 游客没有浏览图片的权限,请 登录注册

下面是你给我的整个工程文件,你没有把那个"维修厂人员资质情况总表.xls"文件一起发过来
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-11-10 17:30
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 8楼 xss_wl
版主大神不是要搜罗资料吧?我觉得没提供完全可以模拟调试的。
仅就题主一楼问题应该是对控件数组和变量数组未区分清楚造成的。
2016-11-10 17:38
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:0 
回复 9楼 xzlxzlxzl
模拟?他的整个程序就是围绕这个Excel文件展开的,你什么内容都不知道,怎么模拟?我十分愿意看到你模拟的结果。
2016-11-10 17:42
快速回复:动态创建控件数组、及创建的控件数组响应事件
数据加载中...
 
   



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

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