| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1024 人关注过本帖
标题:求一个思路和一个定义的方法
只看楼主 加入收藏
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
结帖率:91.53%
收藏
已结贴  问题点数:100 回复次数:14 
求一个思路和一个定义的方法
程序代码:
&&百钱买百鸡.prg

&&_screen.Visible= .F.
formHeight=280
formWidth=375

objForm=CREATEOBJECT("fm1")
objForm.show
READ EVENTS

DEFINE CLASS fm1 as Form
    windowType=1
    showWindow=2
    Desktop=.t.
    autoCenter=.t.
    caption="百钱买百鸡(举解法)"
    height=formHeight
    width=formWidth
    
    ADD OBJECT cmdExit as myCmd1 WITH top=formHeight-5-25,left=formWidth-5-85
    
    ADD OBJECT pageFrame1 as myPf WITH top=5,left=5
        &&ADD OBJECT page1 as myPage1 
        &&ADD OBJECT page2 as myPage2
    
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC
    
    &&PROCEDURE ??调整窗口大小
        &&思路
    &&ENDPROC 
ENDDEFINE

DEFINE CLASS myPf as PageFrame
    visible=.t.
    pageCount=2
    height=formHeight-10-25
    width=formWidth-5
    
ENDDEFINE

*!*    DEFINE CLASS myPage1 as Page
*!*        &&
*!*    ENDDEFINE

*!*    DEFINE CLASS myPage2 as Page
*!*        &&
*!*    ENDDEFINE

DEFINE CLASS myCmd1 as CommandButton
    visible=.t.
    caption="退出"
    height=25
    width=85
    
    PROCEDURE click
        thisform.release
    ENDPROC
ENDDEFINE


问题一:窗口大小调整了,页框的大小怎么随之刷新?求思路

问题二:page控件是怎么add object的?
2015-11-19 09:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:100 
问题一:myPf 的 Anchor=15 和 myCmd1 的 Anchor=12

问题二:可以调用 page 对象的 AddObject() 方法
2015-11-19 09:32
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 2楼 吹水佬
问题一解决了,非常感谢。

问题二,。。。  有点乱 

   
程序代码:
&&百钱买百鸡.prg

&&_screen.Visible= .F.
formHeight=280
formWidth=375

objForm=CREATEOBJECT("fm1")
objForm.show
READ EVENTS

DEFINE CLASS fm1 as Form
    windowType=1
    showWindow=2
    Desktop=.t.
    autoCenter=.t.
    caption="百钱买百鸡(举解法)"
    height=formHeight
    width=formWidth
    minHeight=280
    minWidth=375
    
    ADD OBJECT cmdExit as myCmd1 WITH top=formHeight-5-25,left=formWidth-5-85
    
    ADD OBJECT pageFrame1 as myPf WITH top=5,left=5
*!*        pageFrame1.addObject('page1','questionDesc')
*!*        pageFrame1.addObject('page2','questionAnsw')
    
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC
    
*!*        PROCEDURE resize
*!*            &&
*!*        ENDPROC 
ENDDEFINE

*!*    DEFINE CLASS questionDesc as Page
*!*        visible=.t.
*!*        caption="问题描述"
*!*    ENDDEFINE 

*!*    DEFINE CLASS questionAnsw as Page
*!*        visible=.t.
*!*        caption="解答"
*!*    ENDDEFINE 

DEFINE CLASS myPf as PageFrame
    visible=.t.
    pageCount=2
    height=formHeight-10-25
    width=formWidth-5
    anchor=15
    
ENDDEFINE

DEFINE CLASS myCmd1 as CommandButton
    visible=.t.
    caption="退出"
    height=25
    width=85
    anchor=12
    
    PROCEDURE click
        thisform.release
    ENDPROC
ENDDEFINE

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-11-19 10:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 3楼 不懂才问
Page也可以自己封装,如:
程序代码:
DEFINE CLASS myPf as PageFrame
    visible=.t.
    ** pageCount=2
    height=formHeight-10-25
    width=formWidth-5
    Anchor=15
    
    ADD OBJECT Page1 as myPage1 
    ADD OBJECT Page2 as myPage2
       
ENDDEFINE 

DEFINE CLASS myPage1 as Page
    Visible = .T.
    
    ADD OBJECT Text1 as TextBox WITH;
        top = 10,;
        left = 10
ENDDEFINE

DEFINE CLASS myPage2 as Page
    Visible = .T.
    
    ADD OBJECT Edit1 as EditBox WITH;
        top = 10,;
        left = 10 
ENDDEFINE
2015-11-19 11:25
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 4楼 吹水佬
原来是这样  不但解决了问题二  还解决了问题三  

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-11-19 13:21
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
程序代码:
&&百钱买百鸡.prg

&&_screen.Visible= .F.
formHeight=280
formWidth=375

objForm=CREATEOBJECT("fm1")
objForm.show
READ EVENTS

DEFINE CLASS fm1 as Form
    windowType=1
    showWindow=2
    Desktop=.t.
    autoCenter=.t.
    caption="百钱买百鸡(举解法)"
    height=formHeight
    width=formWidth
    minHeight=280
    minWidth=375
    
    ADD OBJECT cmdExit as myCmd1 WITH top=formHeight-5-25,left=formWidth-5-85
    
    ADD OBJECT pageFrame1 as myPf WITH top=5,left=5
    
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC
    
*!*        PROCEDURE resize
*!*            &&
*!*        ENDPROC 
ENDDEFINE

DEFINE CLASS myPf as PageFrame
    visible=.t.
    &&pageCount=2
    height=formHeight-10-25
    width=formWidth-5
    anchor=15
    
    ADD OBJECT page1 as myPage1
    ADD OBJECT page2 as myPage2
    
ENDDEFINE

DEFINE CLASS myPage1 as Page
    visible=.t.
    caption="问题描述"
    
    ADD OBJECT p1Lbl1 as qdLbl WITH top=15,left=10,caption="百钱买百鸡,公鸡、母鸡、小鸡都要买,各能几只?"
    ADD OBJECT p1Lbl2 as qdLbl WITH top=45,left=10,caption="铜钱一百"
    ADD OBJECT p1Lbl3 as qdLbl WITH top=75,left=10,caption="公鸡一只五钱"
    ADD OBJECT p1Lbl4 as qdLbl WITH top=105,left=10,caption="母鸡一只三钱"
    ADD OBJECT p1Lbl5 as qdLbl WITH top=135,left=10,caption="小鸡三只一钱"
    
ENDDEFINE 

DEFINE CLASS qdLbl as Label
    fontsize=10
    autoSize=.t. 
ENDDEFINE

DEFINE CLASS myPage2 as Page
    visible=.t.
    caption="解答"
ENDDEFINE 

DEFINE CLASS myCmd1 as CommandButton
    visible=.t.
    caption="退出"
    height=25
    width=85
    anchor=12
    
    PROCEDURE click
        thisform.release
    ENDPROC
ENDDEFINE



运行后修改  提示“从内存中移去类”  什么情况

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-11-19 13:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 6楼 不懂才问
VFP帮助中对 CLEAR CLASS 命令 解释有这一段话:
“从内存中清除一个类定义。当创建了一个类的实例,释放该实例后,Visual FoxPro 仍在内存中保存类定义。释放实例后,应适用 CLEAR CLASS 从内存中清除类定义。”

对这个例子测试发现,当对qdLbl类的引用只有一个时不会出现这个异常。
DEFINE CLASS myPage1 as Page
    visible=.t.
    caption="问题描述"
   
    ADD OBJECT p1Lbl1 as qdLbl WITH top=15,left=10,caption="百钱买百鸡,公鸡、母鸡、小鸡都要买,各能几只?"
    ** ADD OBJECT p1Lbl2 as qdLbl WITH top=45,left=10,caption="铜钱一百"
    * ......   
ENDDEFINE  

DEFINE CLASS qdLbl as Label
    visible=.t.
    fontsize=10
    autoSize=.t.
ENDDEFINE

当对qdLbl类的引用多于一个时就会出现这个异常,此时可适当时候从内存中清除一个类定义。
如,在程序关闭时清理。
objForm=CREATEOBJECT("fm1")
objForm.show
READ EVENTS
CLEAR CLASS myPage1   

但用AddObject方法对qdLbl类的引用多次也不会出现这个异常
DEFINE CLASS myPage1 as Page
    visible=.t.
    caption="问题描述"
   
    PROCEDURE Init
        this.AddObject("p1Lbl1", "qdLbl", 15,10,"百钱买百鸡,公鸡、母鸡、小鸡都要买,各能几只?")
        this.AddObject("p1Lbl2", "qdLbl", 45,10,"铜钱一百")
    ENDPROC
ENDDEFINE  

DEFINE CLASS qdLbl as Label
    visible=.t.
    fontsize=10
    autoSize=.t.
   
    PROCEDURE Init(nTop, nLeft, cCaption)
        this.Top = nTop
        this.Left = nLeft
        this.Caption = cCaption
    ENDPROC
ENDDEFINE

2015-11-19 15:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:0 
顺便说说,封装类时最好主动将visible=.t.,否则有可能在引用时因什么也没见到而引起误判。
如:这样的qdLbl,用AddObject引用时默认就见不到。
DEFINE CLASS qdLbl as Label
    fontsize=10
    autoSize=.t.
ENDDEFINE
2015-11-19 15:25
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 7楼 吹水佬
哦,原来是这样

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-11-19 15:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
從來不存在需要移除類定義的情況,出現這種需要,一定是使用了錯誤的類方法。

授人以渔,不授人以鱼。
2015-11-19 19:29
快速回复:求一个思路和一个定义的方法
数据加载中...
 
   



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

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