| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2441 人关注过本帖
标题:VFP自定义类中 父类、子类、参数联系?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把你相關的代碼發出來看看。

授人以渔,不授人以鱼。
2011-07-14 17:46
hw2007name
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2007-11-12
收藏
得分:0 
我是用对象化定义的类,那个方法没什么代码,就上面写的两行,只是那个参数代表了所选择的那一个控件,如果没有传递,就要给一个默认值,要让实例中没有传递参数(即确定那一个控件时,让类给一个默认控件代号)。
2011-07-14 18:28
hw2007name
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2007-11-12
收藏
得分:0 
我的类其实是一个容器对象,根据ROWCOUNT设置会自动添加指定对象的,上面所说的那个方法(不防就叫着A方法),就是在实例调用时对选择的控件(或类默认的控件)做相关设置,比如删除,设置相关属性等。
2011-07-14 18:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
參考下面的代碼:
程序代码:
frm_Test = CREATEOBJECT("Form")
WITH frm_Test
    .AddObject("Container1", "my_Container")
    WITH .Container1
        .Arrange
        .A(5)                        && 在這裏修改輸入的參數測試
        .Visible = .T.
    ENDWITH 
    .AutoCenter = .T.
    .Show(1)
ENDWITH 
RETURN 

DEFINE CLASS my_Container AS Container

     ROWcount = 10
    Indexid = 1
    
    ADD OBJECT Label1 AS Label WITH Caption = "", Top = 5, Left = 5, Height = 25, AutoSize = .T.

 
     PROCEDURE Arrange
         WITH This
             .Top = 5
             .Left = 5
             .Height = ThisForm.Height - .Top - 5
             .Width = ThisForm.Width - .Left - 5
         ENDWITH 
     ENDPROC 
     
    PROCEDURE A
        LPARAMETERS lnTree
        
         IF (PCOUNT() < 1) .OR. (VARTYPE(lnTree) != "N")
             lnTree = THIS.Indexid
         ELSE
             IF lnTree > THIS.ROWcount
                 lnTree = THIS.Indexid
             ENDIF
         ENDIF
         This.Label1.Caption = "lnTree = " + STR(lnTree,3)

 
    ENDPROC

 
ENDDEFINE


下面是運行的畫面:
調用A(5)時的結果   
图片附件: 游客没有浏览图片的权限,请 登录注册


調用A()時的結果   
图片附件: 游客没有浏览图片的权限,请 登录注册


這是不是你希望實現的目的?

[ 本帖最后由 TonyDeng 于 2011-7-14 18:55 编辑 ]

授人以渔,不授人以鱼。
2011-07-14 18:50
hw2007name
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2007-11-12
收藏
得分:0 
看样老兄没理解到我的意思,我是使用了一个自定义,调用这个类的方法,但在对象化实例中,我还会在A方法中添加其它代码,你上面的这个代码我会用的,但还是感谢你对我的贴回复了这么多。
2011-07-14 18:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你是在這個類下面再派生一個類是吧?

授人以渔,不授人以鱼。
2011-07-14 19:01
hw2007name
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2007-11-12
收藏
得分:0 
是的
2011-07-14 19:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這樣調用呢?

程序代码:
frm_Test = CREATEOBJECT("Form")
WITH frm_Test
    .AddObject("Container1", "my_Container")
    WITH .Container1
        .Arrange
        .B(5)
        .Visible = .T.
    ENDWITH 
    .AutoCenter = .T.
    .Show(1)
ENDWITH 
RETURN 

DEFINE CLASS my_Container AS Container

    ROWcount = 10
    Indexid = 1
    
    ADD OBJECT Label1 AS Label WITH Caption = "", Top = 5, Left = 5, Height = 25, AutoSize = .T.
    ADD OBJECT Label2 AS Label WITH Caption = "", Top = 35, Left = 5, Height = 25, AutoSize = .T.

 
     PROCEDURE Arrange
         WITH This
             .Top = 5
             .Left = 5
             .Height = ThisForm.Height - .Top - 5
             .Width = ThisForm.Width - .Left - 5
         ENDWITH 
     ENDPROC 
     
    PROCEDURE A
        LPARAMETERS lnTree
        
         IF (PCOUNT() < 1) .OR. (VARTYPE(lnTree) != "N")
             lnTree = THIS.Indexid
         ELSE
             IF lnTree > THIS.ROWcount
                 lnTree = THIS.Indexid
             ENDIF
         ENDIF
         This.Label1.Caption = "lnTree = " + STR(lnTree,3)

 
    ENDPROC
    
    PROCEDURE B(lnTree)
        This.Label2.Caption = "這是額外的動作"
        IF VARTYPE(lnTree) == "N"
            This.A(lnTree)
        ENDIF 
    ENDPROC 

 
ENDDEFINE


[ 本帖最后由 TonyDeng 于 2011-7-14 19:13 编辑 ]

授人以渔,不授人以鱼。
2011-07-14 19:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
派生子類就必須這樣:

程序代码:
frm_Test = CREATEOBJECT("Form")
WITH frm_Test
    .AddObject("Container1", "SubContainer")            && 從派生類建立實例對象
    WITH .Container1
        .Arrange
        .A(5)                                            && 調用對象的A方法,即派生類中的方法,它自己調用父類代碼
        .Visible = .T.
    ENDWITH 
    .AutoCenter = .T.
    .Show(1)
ENDWITH 
RETURN 

* 父類定義
DEFINE CLASS my_Container AS Container

    ROWcount = 10
    Indexid = 1
    
    ADD OBJECT Label1 AS Label WITH Caption = "", Top = 5, Left = 5, Height = 25, AutoSize = .T.
    ADD OBJECT Label2 AS Label WITH Caption = "", Top = 35, Left = 5, Height = 25, AutoSize = .T.

 
     PROCEDURE Arrange
         WITH This
             .Top = 5
             .Left = 5
             .Height = ThisForm.Height - .Top - 5
             .Width = ThisForm.Width - .Left - 5
         ENDWITH 
     ENDPROC 
     
    PROCEDURE A
        LPARAMETERS lnTree
        
         IF (PCOUNT() < 1) .OR. (VARTYPE(lnTree) != "N")
             lnTree = THIS.Indexid
         ELSE
             IF lnTree > THIS.ROWcount
                 lnTree = THIS.Indexid
             ENDIF
         ENDIF
         This.Label1.Caption = "lnTree = " + STR(lnTree,3)

 
    ENDPROC
    
    PROCEDURE B(lnTree)
        This.Label2.Caption = "父類中B方法執行的動作"
        IF VARTYPE(lnTree) == "N"
            This.A(lnTree)
        ENDIF 
    ENDPROC 

 
ENDDEFINE

* 派生類定義
DEFINE CLASS SubContainer AS my_Container

    PROCEDURE A(lnTree)
        This.Label2.Caption = "派生類中A方法執行的動作"
        my_Container::A(lnTree)                && 直接指定父類中需求執行的事件或方法,不限於本身A方法的父代碼
        *DODEFAULT(lnTree)                    && 只能執行本身A方法的父代碼
    ENDPROC 
    
ENDDEFINE 


[ 本帖最后由 TonyDeng 于 2011-7-14 23:29 编辑 ]

授人以渔,不授人以鱼。
2011-07-14 19:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
還有第三種方法,建立實例之後動態掛鉤附加代碼(BINDEVENT()函數),適用於單個實例對象臨時加掛方法,也可隨時解掛。不詳述,以上兩種應該滿足你的需求了。

授人以渔,不授人以鱼。
2011-07-14 19:27
快速回复:VFP自定义类中 父类、子类、参数联系?
数据加载中...
 
   



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

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