用VisualFoxPro5.0設(shè)計(jì)數(shù)據(jù)文件結(jié)構(gòu)瀏覽器

字號(hào):

在用VFP進(jìn)行程序設(shè)計(jì)時(shí),不可避免地涉及到數(shù)據(jù)表和自由表本身的操作,例如我們至少需要隨時(shí)知道這些數(shù)據(jù)表的結(jié)構(gòu),盡管這些數(shù)據(jù)表是我們自己設(shè)計(jì)的,但如果文件多了,時(shí)間長(zhǎng)了,就完全有可能記不清楚,特別是分析別人的程序時(shí),
    這個(gè)問(wèn)題就顯得特別突出,為此,我們可以設(shè)計(jì)一個(gè)程序來(lái)解決這個(gè)問(wèn)題,由于這類(lèi)程序不依賴(lài)于某一具體環(huán)境,并具有很強(qiáng)的獨(dú)立性和靈活性,因此我們有必要將它設(shè)計(jì)成一個(gè)自定義類(lèi),從而一勞永逸地使用它:
    一.新建一個(gè)類(lèi)
    打開(kāi)"文件/新建.../類(lèi)",類(lèi)名為list_stru,派生于"Container"(容器),在"存儲(chǔ)于..."中選擇一個(gè)適當(dāng)?shù)哪夸泚?lái)保存這個(gè)自定義類(lèi).然后單擊"確定".
    二.設(shè)置自定義類(lèi)list_stru的屬性
    進(jìn)入類(lèi)設(shè)計(jì)器后,接著設(shè)置Container的屬性:BackStyle為0(透明),BorderWidth為2,SpecialEffect為0(凹起)
    三.設(shè)置顯示文件名的列表框?qū)ο?LIST1)
    添加一個(gè)名為list1的list對(duì)象,該對(duì)象用來(lái)選擇需顯示結(jié)構(gòu)的數(shù)據(jù)表文件名.
    再按如下方法設(shè)置該對(duì)象的一些屬性:
    (1)RowSourceType=7 (文件)
    即該對(duì)象的內(nèi)容來(lái)源于磁盤(pán)文件
    (2)RowSource=*.dbf
    只顯示后綴名為DBF的文件
    (3)編寫(xiě)當(dāng)list1中的項(xiàng)目被選擇后所要發(fā)生的代碼,這可以通過(guò)InteractiveChange事件來(lái)實(shí)現(xiàn):
    InteractiveChange Event
    Local curpath && 定義一變量
    curpath=this.list(2) && 返回所選取的文件的路徑
    set defa to (curpath) && 指定默認(rèn)路徑
    if .not.’[’$this.value && 如果所選擇的項(xiàng)目是一個(gè)目錄(即包含有’[’字符)則不執(zhí)行下列操作
    use (this.value)
    this.parent.list2.rowsourcetype=0
    this.parent.list2.clear this.parent.list2.rowsourcetype=8
    this.parent.list2.rowsource=substr(this.value,1,len(this.value)-4) && 用SUBSTR函數(shù)取得完整文件名
    this.parent.list2.listindex=1
    endif
    下面對(duì)該程序作一些簡(jiǎn)要說(shuō)明:
    A.將LIST對(duì)象的RowSourceType屬性為7(文件),顯示磁盤(pán)文件時(shí),第一列為盤(pán)符,第二列才為盤(pán)符和路徑,因此需用this.list(2)來(lái)返回完整的文件路徑,然后用Set defa to (curpath)來(lái)轉(zhuǎn)換到相應(yīng)的路徑,注意此處必須用名稱(chēng)表達(dá)式()將curpath括起來(lái),它相當(dāng)于宏代換&,后面的use (this.value)語(yǔ)句也是這個(gè)意思
    B.在操作時(shí)我們可能要不斷地選擇文件名并在list2中顯示其結(jié)構(gòu),因此需要不斷地更新list2的RowSource內(nèi)容,這是通過(guò)this.parent.list2.clear來(lái)實(shí)現(xiàn)的,但是在使用clear方法前,必須將RowSourceType屬性設(shè)置為0 (無(wú)),否則是無(wú)效操作,清除內(nèi)容后,再將RowSourceType屬性設(shè)置為8(結(jié)構(gòu))即可
    C.在設(shè)置了RowSourceType屬性后,再用RowSource屬性定義相應(yīng)源文件名稱(chēng),即substr(this.value,1,len(this.value)-4)語(yǔ)句
    四.添加顯示文件結(jié)構(gòu)的列表框?qū)ο?LIST2)
    添加名為L(zhǎng)IST2的列表框?qū)ο?用于顯示文件結(jié)構(gòu),但是不必再設(shè)置它的屬性,因?yàn)槠銻owSourceType和RowSource屬性已經(jīng)在LIST1的InteractiveChange事件中定義了。
    最后,我們?cè)偌由舷鄳?yīng)的說(shuō)明性的標(biāo)簽對(duì)象和其它適當(dāng)?shù)膕hape對(duì)象來(lái)美化界面,保存起來(lái),這個(gè)類(lèi)就可以使用了,另外,以上程序中包括了一些有關(guān)文件操作和列表框(組合框)對(duì)象的關(guān)鍵用法,如果能夠加以靈活使用,對(duì)以后的程序設(shè)計(jì)會(huì)有很大的幫助