用VisualFoxPro5.0設計數(shù)據(jù)文件結構瀏覽器

字號:

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