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

原来的想法是,先都展现出来,但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
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
我去试试

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-20 09:44
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 4楼 tlliqi
今天喝了点小酒,有点晕,下面的时间,不务正业了,正事明天再说,哈哈

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-20 19:49
不懂才问
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
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 11楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册


呵呵  呵呵  呵呵呵  。。。   终于体会到这个属性的作用了

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-21 18:01
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
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')
            WITH thisform.&flName
                .top=135+(thisform.minDistance*2+24)*(addLineNum-1)
                .value="材料分累"+ALLTRIM(STR(addLineNum))
            ENDWITH  
        thisform.addobject('&clName','clmc_C')
            WITH thisform.&clName
                .top=135+(thisform.minDistance*2+24)*(addLineNum-1)
                .value="材料明称"+ALLTRIM(STR(addLineNum))
            ENDWITH
        addLineNum=addLineNum+1
        thisform.height=thisform.'&clName'.top+200   &&新问题在这,动态决定表单的高,想调用最后添加的控件的属性,不成功
        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))
    visible=.t.
ENDDEFINE

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

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-21 18:22
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
快帮帮我   不然无法解决下一个问题了

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-21 22:10
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
thisform.height=thisform.&clName. .top+200   &&新问题在这,动态决定表单的高,想调用最后添加的控件的属性,不功能


用两个点  解决问题  不过  不知道为什么 。。。
+++++++++++++++++++++++

查过帮助后   。。。。

哈哈哈哈

图片附件: 游客没有浏览图片的权限,请 登录注册


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


报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-21 22:32
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
突然又想到一个问题,万一最终用户点多了,就想要两行,却点了三行???怎么删呢?

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-21 23:56
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 19楼 吹水佬
。。。那就来个简单的  红字部分就是问题了,谢谢

窗体实例化
窗体.show

窗体类定义
  窗体属性若干

  添加“增加行”按钮实例
  添加“删除行”按钮实例

  “增加行”click方法
    form.addobject('新行的控件1','基类')
        调整窗体高度
  方法结束

  “删除行”click方法
    就这里不知道怎么删除,有delObject方法吗?还是逐个Release
    调整窗体高度
  方法结束

窗体类定义结束

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



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

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