| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3065 人关注过本帖
标题:根据微调按钮动态增加控件,表单实例化后,怎么加控件?
只看楼主 加入收藏
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
结帖率:91.53%
收藏
已结贴  问题点数:100 回复次数:20 
根据微调按钮动态增加控件,表单实例化后,怎么加控件?
用设计器做的是这样的:
图片附件: 游客没有浏览图片的权限,请 登录注册

原来的想法是,先都展现出来,但readOnly三行,第一行肯定是要有的,当微调等于2,第二行解禁,依此类推,重刷表单

后来感觉不帅,就想用代码动态增加

程序代码:
CLEAR ALL 
CLOSE PROCEDURES
SET PROCEDURE TO "MyForm", "MyLogin","otherForm"
runOtherForm1()

CLOSE PROCEDURES
&&CLOSE ALL 
return

PROCEDURE runOtherForm1
    PUBLIC  otherForm1
    otherForm1=CREATEOBJECT("m1Form")
    otherForm1.show
    READ EVENTS
    RETURN 
ENDPROC 

DEFINE CLASS m1Form as myForm
    showWindow=2
    caption="功能模块1窗口"
    autoCenter=.t.
    windowType=1
    
    ADD OBJECT howManyLine as spinner WITH spinnerHighValue=4,spinnerLowValue=1,value=1,left=180
    ADD OBJECT button1 as commandButton WITH caption="返回主程序"
    
    &&根据微调按钮,增加条目开始
    ADD OBJECT clfl1 as textBox WITH top=135,left=12,height=24,width=48,value="材料分类1"
    ADD OBJECT clmc1 as textBox WITH top=135,left=63,height=24,width=77,value="材料名称1"
    
    PROCEDURE init 
        MESSAGEBOX(thisform.howManyLine.value,64,"调试:微调的值是Value吗?")
    ENDPROC 

    PROCEDURE howManyLine.valid
        howLine=thisform.howManyLine.value 
        IF howLine>=2
            FOR addLine=2 TO howLine
                 flName="clfl"+ALLTRIM(STR(addLine))  &&用宏代实现分类名称和材料名称,不知道怎么样?
                 clName="clmc"+ALLTRIM(STR(addLine))  &&或者用这个先确定名称
                 MESSAGEBOX(clName,64,"运行了吗?")
                 ADD OBJECT &flName as textBox WITH top=135+addLine,left=12,height=24,width=48,value="材料分类"+ALLTRIM(STR(addLine))
                 ADD OBJECT &clName as textBox WITH top=135+addLine,left=63,height=24,width=77,value="材料名称"+ALLTRIM(STR(addLine))
            ENDFOR 
            
        ENDIF
        thisform.refresh
    ENDPROC    
    
    &&根据微调按钮,布局结束
    
    PROCEDURE button1.click
        RELEASE thisform
    ENDPROC 
        
    PROCEDURE Destroy
        MESSAGEBOX(thisform.clmc2.value,64,"控件增加了吗?")
        MESSAGEBOX("模块1表单销毁了",64,"123")
        CLEAR EVENTS 
    ENDPROC
    
ENDDEFINE 


可是  发现自己不会实例化表单后  再增加控件  。。。
搜索更多相关主题的帖子: 动态 
2015-12-20 00:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:33 
先写一个container类,用于每行。然后用.AddObject()逐行动态添加实例,想什么时候加就什么时候加,不用事先加多少行。用一个添加按钮,点一下加一个,好过你现在设计的微调。

授人以渔,不授人以鱼。
2015-12-20 09:11
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
我去试试

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-20 09:44
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
想法不错 弄好了没有
2015-12-20 10:15
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11808
专家分:43421
注 册:2006-5-13
收藏
得分:0 
为什么不用表格?用一个自由表配合表格,想增加多少就增加多少记录,而且只要下移光标就可以自动添加记录,应该会更方便得多。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-12-20 10:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:33 
如果GRID能满足需要就用GRID,方便高效。
2015-12-20 16:47
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 4楼 tlliqi
今天喝了点小酒,有点晕,下面的时间,不务正业了,正事明天再说,哈哈

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-20 19:49
wcx_cc
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:352
专家分:1152
注 册:2015-10-2
收藏
得分:0 
醒酒了肯定会弄好的 ...
2015-12-20 20:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
。。

[此贴子已经被作者于2015-12-20 22:25编辑过]


授人以渔,不授人以鱼。
2015-12-20 21:17
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
先没用T版说的容器,我先弄个简单的,不过,好像是增加了新控件,但却看不到  。。。

程序代码:
CLEAR ALL 
CLOSE PROCEDURES
SET PROCEDURE TO "MyForm", "MyLogin","otherForm"
PUBLIC addLineNum
addLineNum=2
runOtherForm1()

CLOSE PROCEDURES
&&CLOSE ALL 
return

PROCEDURE runOtherForm1
    PUBLIC  otherForm1
    otherForm1=CREATEOBJECT("m1Form")
    otherForm1.show
    READ EVENTS
    RETURN 
ENDPROC 

DEFINE CLASS m1Form as myForm
    showWindow=2
    caption="功能模块1窗口"
    autoCenter=.t.
    windowType=1
    minLabelFontSize=8    &&定义最小标签的字号
    minOtherFontSize=9    &&定义最小文本框、列表框、按钮字号
    minTitleFontSize=18    &&定义标题标签小号字号
    minDistance=2    &&定义控件间最小间距
    minControlTop=24    &&定义最顶端控件的最小顶边
    minControlLeft=12    &&定义最左端控件的最小侧边距
    
    &&ADD OBJECT howManyLine as spinner WITH spinnerHighValue=4,spinnerLowValue=1,value=1,left=180
    ADD OBJECT addLine as commandButton WITH caption="增加行"&&,initValue=2  
    ADD OBJECT button1 as commandButton WITH caption="返回主程序",left=thisform.addLine.left+thisform.addLine.width+10
    
    &&根据微调按钮,增加条目开始
    ADD OBJECT clfl1 as clfl_C WITH top=135,left=12,height=24,width=48,value="材料分类1"
    ADD OBJECT clmc1 as clmc_C WITH top=135,left=63,height=24,width=77,value="材料名称1"
    
    PROCEDURE addLine.click
        flName="clfl"+ALLTRIM(STR(addLineNum))
        clName="clmc"+ALLTRIM(STR(addLineNum)) 
        thisform.addobject('&flName','clfl_C')
        thisform.addobject('&clName','clmc_C')
        addLineNum=addLineNum+1
        &&thisform.height=thisform.&clName.top+200
        thisform.refresh
    ENDPROC 

*!*        PROCEDURE howManyLine.valid
*!*            howLine=thisform.howManyLine.value 
*!*            IF howLine>=2
*!*                FOR addLine=2 TO howLine
*!*                     flName="clfl"+ALLTRIM(STR(addLine))  &&用宏代实现分类名称和材料名称,不知道怎么样?
*!*                     clName="clmc"+ALLTRIM(STR(addLine))  &&或者用这个先确定名称
*!*                     MESSAGEBOX(clName,64,"运行了吗?")
*!*                     ADD OBJECT &flName as textBox WITH top=135+addLine,left=12,height=24,width=48,value="材料分类"+ALLTRIM(STR(addLine))
*!*                     ADD OBJECT &clName as textBox WITH top=135+addLine,left=63,height=24,width=77,value="材料名称"+ALLTRIM(STR(addLine))
*!*                ENDFOR 
*!*                
*!*            ENDIF
*!*            thisform.refresh
*!*        ENDPROC    
    
    &&根据微调按钮,布局结束
    
    PROCEDURE button1.click
        RELEASE thisform
    ENDPROC 
        
    PROCEDURE Destroy
        MESSAGEBOX(thisform.clmc2.value,64,"控件增加了吗?")
        MESSAGEBOX("模块1表单销毁了",64,"123")
        CLEAR EVENTS 
    ENDPROC
    
ENDDEFINE 

DEFINE CLASS clfl_C as TextBox 
    top=135+100*addLineNum
    left=12
    height=24
    width=48
    value="材料分类"+ALLTRIM(STR(addLineNum))
ENDDEFINE 

DEFINE CLASS clmc_C as TextBox 
    top=135+100*addLineNum
    left=63
    height=24
    width=77
    value="材料新名称"+ALLTRIM(STR(addLineNum))
ENDDEFINE 


提示我一下,如果已经添加了,为什么不显示出来呢?       谢谢

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-21 15:39
快速回复:根据微调按钮动态增加控件,表单实例化后,怎么加控件?
数据加载中...
 
   



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

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