您的位置:程序门 -> vb -> 基础类



动态添加控件的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


动态添加控件的问题[已结贴,结贴人:ymymym16888]
发表于:2007-05-15 12:01:20 楼主
先看下我的代码吧:

private   withevents   labelone   as   label
private   withevents   labeltwo   as   label

private   sub   form_click()
dim   ym   as   string
dim   ii   as   integer
dim   i   as   integer
open   app.path   &   "\menu.ini "   for   input   access   read   as   #1
do   while   not   eof(1)
line   input   #1,   ym
set   labelone   =   controls.add( "vb.label ",   "labelone ",   me)
with   labelone
                .alignment   =   2
                .autosize   =   true
                .font   =   "标楷体 "
                .backstyle   =   0
                .fontsize   =   24
                .fontbold   =   true
                .left   =   220
                .top   =   180   +   i   *   500
                .caption   =   ym
                .visible   =   true
end   with
set   labeltwo   =   controls.add( "vb.label ",   "labeltwo ",   me)
with   labeltwo
                .alignment   =   2
                .autosize   =   true
                .font   =   "标楷体 "
                .backstyle   =   0
                .fontsize   =   24
                .fontbold   =   false
                .left   =   200
                .top   =   200   +   i   *   500
                .caption   =   ym
                .visible   =   true
end   with
i   =   i   +   1
end   if

loop
close   #1
end   sub


原意是文本menu.ini中有多少行数据就生成多少乘以2个label控件
每两个控件显示一行,产生投影效果
现在问题是只会显示最后一行数据

大家帮帮忙如何解决

在线等
解决了卖血也把分送上
发表于:2007-05-15 12:09:231楼 得分:50
private   withevents   labelone   as   label
private   withevents   labeltwo   as   label

private   sub   form_click()
dim   ym   as   string
dim   ii   as   integer
dim   i   as   integer
open   "d:\menu.ini "   for   input   access   read   as   #1
do   while   not   eof(1)
        line   input   #1,   ym
        set   labelone   =   controls.add( "vb.label ",   "labelone "   &   i,   me)
        with   labelone
                        .alignment   =   2
                        .autosize   =   true
                        .font   =   "标楷体 "
                        .backstyle   =   0
                        .fontsize   =   24
                        '.fontbold   =   true
                        .left   =   220
                        .top   =   180   +   i   *   500
                        .caption   =   ym
                        .visible   =   true
        end   with
        set   labeltwo   =   controls.add( "vb.label ",   "labeltwo "   &   i,   me)
        with   labeltwo
                        .alignment   =   2
                        .autosize   =   true
                        .font   =   "标楷体 "
                        .backstyle   =   0
                        .fontsize   =   24
                        .fontbold   =   false
                        .left   =   260
                        .top   =   200   +   i   *   500
                        .caption   =   ym
                        .visible   =   true
                        .zorder   1
        end   with
        i   =   i   +   1

loop
close   #1
end   sub
发表于:2007-05-15 12:38:502楼 得分:50
//原意是文本menu.ini中有多少行数据就生成多少乘以2个label控件
每两个控件显示一行,产生投影效果
现在问题是只会显示最后一行数据


第1   窗体中控件的总数目是有限制的

第2   你只定义了两个label,所以不管怎么写代码,窗体上总终显示的还是2个能相应事件的label

第3   如果可以这么定义:
private   withevents   labelone(   )   as   label
private   withevents   labeltwo(   )   as   label
就好了,但是,很遗憾,vb不支持这样的写法

第4   建议用控件数组解决,即先在窗体上画两个label,然后设置其index属性为0,在需要添加控件的时候   用load   控件名(索引)即可添加控件,剩下的问题就是调整控件的大小   坐标   可见性等等了,这个你应该没问题吧
发表于:2007-05-15 13:00:023楼 得分:0
推荐暴风雨的第四种方法
方便

而且用控件数组可以至少放几万个控件
我试过可以放3万多个
发表于:2007-05-15 13:01:314楼 得分:0
再说一句,如果你一定要用controls.add添加控件数组的话也可以,不过要麻烦一点就是了


快速检索

最新资讯
热门点击