电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP6.0中ActiveX控件TreeView 使用實(shí)例

 萊衛(wèi)圖 2014-07-18
VFP6.0中ActiveX控件TreeView 使用實(shí)例

 ActiveX控件早已為大多數(shù)程序開(kāi)發(fā)人員作為一重要工具來(lái)使用。由于它與開(kāi)發(fā)語(yǔ)言無(wú)關(guān),任何支持ActiveX控件的軟件平臺(tái)上,都可以使用ActiveX控件。就像使用WINDOWS控件一樣自如。然而,ActiveX控件在具體到某種開(kāi)發(fā)工具中去使用時(shí)會(huì)遇到很多問(wèn)題,這一點(diǎn)在許多刊物的文章都經(jīng)常被提出討論,但大多數(shù)都是針對(duì)Vc,Delphi,VB,PB等開(kāi)發(fā)平臺(tái)下的ActiveX控件。其實(shí),在上述平臺(tái)中使用ActiveX控件基本上能在其幫助功能中,開(kāi)發(fā)人員依照其示例最終能找到ActiveX控件的屬性,方法,事件的使用說(shuō)明。甚至有些開(kāi)發(fā)工具已將部分ActiveX控件作為其常用表單控件,使開(kāi)發(fā)人員使用起來(lái)感到非常方便。

  可是在VFP開(kāi)發(fā)平臺(tái)下,去使用ActiveX控件就不如上述開(kāi)發(fā)工具那樣的幸運(yùn),因?yàn)閂FP對(duì)其根本就未涉及到相關(guān)語(yǔ)法說(shuō)明和示例,使VFP開(kāi)發(fā)者感到尷尬與茫然。又因,很少有介紹這方面文章。因此,筆者就以正在開(kāi)發(fā)“樓盤銷售軟件”為例介紹一下TreeView控件在VFP中的具體使用,以供與筆者同感的VFP同仁參考。

  一、 首先介紹TreeView 控件

  TreeView 控件顯示 Node 對(duì)象的分層列表,每個(gè) Node 對(duì)象均由一個(gè)標(biāo)簽和一個(gè)可選的位圖組成。TreeView 一般用于顯示文檔標(biāo)題、索引入口、磁盤上的文件和目錄、或能被有效地分層顯示的其它種類信息。

  Node 對(duì)象是 TreeView 控件中的一項(xiàng),它包含圖像和文本。Nodes 集合包含一個(gè)或多個(gè) Node 對(duì)象。 語(yǔ)法:treeview.Nodes,treeview.Nodes.Item(index)??梢允褂脴?biāo)準(zhǔn)的集合方法(例如 Add 和 Remove 方法)操作 Node 對(duì)象??梢园雌渌饕虼鎯?chǔ)在 Key 屬性中的唯一鍵來(lái)訪問(wèn)集合中的每個(gè)元素。為選擇指定的 Node 對(duì)象,必須通過(guò)它的 Index 屬性或 Key 屬性的值去引用它。

  在 Treeview 控件的 Nodes 集合中添加一個(gè) Node 對(duì)象:object.Add(relative, relationship, key, text, image, selectedimage) Nodes 集合是一個(gè)基于 1 的集合。在添加 Node 對(duì)象時(shí),它被指派一個(gè)索引號(hào),該索引號(hào)被存儲(chǔ)在 Node 對(duì)象的 Index 屬性中。這個(gè)最新成員的 Index 屬性值就是 Node 集合的 Count 屬性的值。因?yàn)?Add 方法返回對(duì)新建立的 Node 對(duì)象的引用,所以使用這個(gè)引用來(lái)設(shè)置新 Node 的屬性十分方便。下面介紹一下節(jié)點(diǎn)幾個(gè)屬性:

  relative 是可選的。它表示已存在的 Node 對(duì)象的索引號(hào)或鍵值。而新節(jié)點(diǎn)與已存在的節(jié)點(diǎn)間的關(guān)系,可在下一個(gè)參數(shù) relationship 中找到。

  relationship 是可選的。它表示指定的 Node 對(duì)象的相對(duì)位置,如設(shè)置值中所述。relationship 的設(shè)置值是:

  tvwFirst為常數(shù) ,0 為值。它表示首的節(jié)點(diǎn)。該 Node 和在 relative 中被命名的節(jié)點(diǎn)位于同一層,并位于所有同層節(jié)點(diǎn)之前。

  TvwLast為常數(shù),1 為值。它表示最后的節(jié)點(diǎn)。該 Node 和在 relative 中被命名的節(jié)點(diǎn)位于同一層,并位于所有同層節(jié)點(diǎn)之后。任何連續(xù)地添加的節(jié)點(diǎn)可能位于最后添加的節(jié)點(diǎn)之后

  TvwNext為常數(shù),2 為缺省值。它表示下一個(gè)節(jié)點(diǎn)。該 Node 位于在 relative 中被命名的節(jié)點(diǎn)之后。

  TvwPrevious為常數(shù), 3為值。它表示前一個(gè)節(jié)點(diǎn)。該 Node 位于在 relative 中被命名的節(jié)點(diǎn)之前。

  TvwChild為常數(shù), 4 為缺省值。它表示子節(jié)點(diǎn)。該 Node 成為在 relative 中被命名的節(jié)點(diǎn)的子節(jié)點(diǎn)。

  注意 如果在 relative 中沒(méi)有被命名的 Node 對(duì)象,則新節(jié)點(diǎn)被放在節(jié)點(diǎn)頂層的最后位置。

  key 是可選的。它表示節(jié)點(diǎn)中唯一的字符串,可用于用 Item 方法檢索 Node。

  text 是必需的。它表示在 Node 中出現(xiàn)的字符串,即節(jié)點(diǎn)的名稱。

  index 是整數(shù)或字符串,它唯一地標(biāo)識(shí) Nodes 集合的一個(gè)成員。整數(shù)是 Index 屬性的值,字符串是 Key 屬性的值。

  FullPath 屬性,這個(gè)屬性返回在 TreeView 控件中引用的 Node 對(duì)象的完整限定路徑。當(dāng)賦予該屬性為字符串變量時(shí),該字符串被設(shè)為具有指定索引的 FullPath 節(jié)點(diǎn)。

  Indentation 屬性返回或設(shè)置控件中對(duì)象的縮進(jìn)寬度。

  LabelEdit 屬性返回或設(shè)置一個(gè)值,它確定是否可以編輯在 TreeView 控件中的 Node 對(duì)象的標(biāo)簽。

  二、源程序示例

  在該程序中TreeView控件能夠?qū)崿F(xiàn)項(xiàng)目、樓宇、單元、樓層這樣四層逐級(jí)包含的關(guān)系。用戶只要簡(jiǎn)單地單擊每層節(jié)點(diǎn)“+”/“-”就能很直觀地觀察到一個(gè)項(xiàng)目中包含幾幢樓,一幢樓包含幾個(gè)單元,一個(gè)單元又有多少樓層。通過(guò)與頁(yè)框PAGEFRAME中每一頁(yè)的表格GRID聯(lián)合使用,只要雙擊每層節(jié)點(diǎn)就可在相應(yīng)的表中增加記錄并在GRID中顯示相應(yīng)的詳細(xì)信息。值得說(shuō)明的是該程序可以實(shí)現(xiàn)多個(gè)項(xiàng)目的顯示,項(xiàng)目節(jié)點(diǎn)與項(xiàng)目節(jié)點(diǎn)之間是平行同級(jí)的關(guān)系,僅僅是第二個(gè)項(xiàng)目首節(jié)點(diǎn)排在第一個(gè)之后。而樓宇節(jié)點(diǎn)是項(xiàng)目節(jié)點(diǎn)的子節(jié)點(diǎn),單元節(jié)點(diǎn)是樓宇節(jié)點(diǎn)的子節(jié)點(diǎn),樓層節(jié)點(diǎn)是單元節(jié)點(diǎn)的子節(jié)點(diǎn)。

  源程序1實(shí)現(xiàn)TreeView 控件初始化工作,即表單中的Olecontrol1.init事件填寫源程序1中所有代碼。源程序2實(shí)現(xiàn)與頁(yè)框配合,顯示節(jié)點(diǎn)相應(yīng)的詳細(xì)內(nèi)容,即表單中的Olecontrol1.NodeClick事件填寫源程序2中所有代碼。

  源程序1代碼如下:

  LOCAL M.L_XMCOUNT,I,J,K,L,M.L_NODES,M.L_LYCOUNT,M.L_DYCOUNT,M.L_LCCOUNT
  THIS.NODES.CLEAR &&清除所有節(jié)點(diǎn)
  THIS.LABELEDIT=1 &&節(jié)點(diǎn)標(biāo)簽可以編輯
  THIS.Indentation=10 &&縮進(jìn)寬度為10個(gè)象素
  SELECT SF_XMXX
  set dele on
  M.L_XMCOUNT=RECCOUNT()
  FOR I=1 TO M.L_XMCOUNT
  SELECT SF_XMXX
  GO I
  if !delete()
  M.L_NODES=THIS.NODES.ADD(,,'XM'+XM_BH,XM_MC) &&向節(jié)點(diǎn)集合加入第一個(gè)節(jié)點(diǎn)KEY=XM,TEXT=項(xiàng)目名稱
  M.L_NODES.EXPANDED=.T. &&所有節(jié)點(diǎn)可以折疊
  M.L_NODES.FORECOLOR=RGB(0,0,255) &&設(shè)置所有節(jié)點(diǎn)的前景顏色
  M.P_XMBH=XM_BH
  =REQUERY('VIEW_XMLY')
  M.L_LYCOUNT=RECCOUNT('VIEW_XMLY')
  IF M.L_LYCOUNT>0
  FOR J=1 TO M.L_LYCOUNT
  SELECT VIEW_XMLY
  GO J
  if !delete()
  &&向'項(xiàng)目'父節(jié)點(diǎn)加入子節(jié)點(diǎn)'樓宇'KEY=LY,TEXT=樓宇實(shí)際編號(hào)
  THIS.NODES.ADD('XM'+SF_XMXX.XM_BH,4,'LY'+VIEW_XMLY.LY_BH,VIEW_XMLY.LY_SJBH)
  M.P_LYBH=VIEW_XMLY.LY_BH
  =REQUERY('VIEW_XMDY')
  M.L_DYCOUNT=RECCOUNT('VIEW_XMDY')
  IF M.L_DYCOUNT>0
  FOR K=1 TO M.L_DYCOUNT
  SELECT VIEW_XMDY
  GO K
  if !delete()
  &&向'樓宇'父節(jié)點(diǎn)加入子節(jié)點(diǎn)'單元'KEY=DY,TEXT=單元實(shí)際編號(hào) 
  THIS.NODES.ADD('LY'+VIEW_XMLY.LY_BH,4,'DY'+VIEW_XMDY.DY_BH,ALLTRIM(STR(VIEW_XMDY.DY_SJBH))+'單元')
  M.P_DYBH=VIEW_XMDY.DY_BH
  =REQUERY('VIEW_XMLC')
  M.L_LCCOUNT=RECCOUNT('VIEW_XMLC')
  IF M.L_LCCOUNT>0
  FOR L=1 TO M.L_LCCOUNT
  SELECT VIEW_XMLC
  GO L
  if !delete()
  &&向'單元'父節(jié)點(diǎn)加入子節(jié)點(diǎn)'樓層'KEY=LC,TEXT=樓層實(shí)際編號(hào) 
  THIS.NODES.ADD('DY'+VIEW_XMDY.DY_BH,4,'LC'+VIEW_XMLC.LC_BH,ALLTRIM(STR(VIEW_XMLC.LC_SJCH))+'層')
  endif
  ENDFOR
  ENDIF
  endif
  ENDFOR
  ENDIF
  endif
  ENDFOR
  ENDIF
  endif
  ENDFOR

  源程序2如下:

  *** ActiveX 控件事件 ***
  LPARAMETERS node
  *** ActiveX Contro1l Event ***

  LOCAL M.L_NODES,M.L_SELECTED,L_INDEX
  M.L_SELECTED=THISform.Olecontrol1.SELECTEDITEM.INDEX
  M.L_NODES=THISFORM.OLECONTROL1.NODES(M.L_SELECTED)
  THISFORM.PAGEFRAME1.PAGE1.CAPTION='項(xiàng)目信息'
  THISFORM.PAGEFRAME1.PAGE2.CAPTION='樓宇信息'
  THISFORM.PAGEFRAME1.PAGE3.ENABLED=.F.
  THISFORM.PAGEFRAME1.PAGE3.CAPTION='單元信息'
  THISFORM.PAGEFRAME1.PAGE4.ENABLED=.F.
  THISFORM.PAGEFRAME1.PAGE4.CAPTION='樓層信息'
  DO CASE
  CASE M.L_NODES.KEY='XM'
  THISFORM.PAGEFRAME1.ACTIVEPAGE=1
  CASE M.L_NODES.KEY='LY'
  THISFORM.PAGEFRAME1.ACTIVEPAGE=2
  CASE M.L_NODES.KEY='DY'
  THISFORM.PAGEFRAME1.PAGE3.ENABLED=.T.
  THISFORM.PAGEFRAME1.ACTIVEPAGE=3
  CASE M.L_NODES.KEY='LC'
  THISFORM.PAGEFRAME1.PAGE4.ENABLED=.T.
  THISFORM.PAGEFRAME1.ACTIVEPAGE=4
  ENDCASE

  if M.L_NODES.KEY<>'XM'
  DO CASE
  CASE M.L_NODES.KEY='LY'
  M.P_XMBH=substr(M.L_NODES.KEY,3,2)
  M.P_LYBH=RIGHT(M.L_NODES.KEY,LEN(M.L_NODES.KEY)-2)
  =REQUERY('VIEW_XMDY')
  IF RECCOUNT('VIEW_XMDY')=0
  SELE SF_LYXX
  SET ORDER TO LYBH
  SEEK M.P_LYBH
  IF FOUND()
  DYZS=SF_LYXX.LY_DYZS
  ENDIF
  FOR I=1 TO DYZS
  SELECT VIEW_XMDY
  APPEND BLANK
  THISFORM.PAGEFRAME1.PAGE3.GRID1.afterROWCOLCHANGE
  ENDFOR
  GO TOP
  THISFORM.PAGEFRAME1.PAGE3.GRID1.refresh
  ENDIF

  THISFORM.PAGEFRAME1.PAGE2.CAPTION=ALLTRIM(M.L_NODES.TEXT)
  THISFORM.PAGEFRAME1.PAGE3.ENABLED=.T.
  THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(LEFT(this.nodes(M.L_SELECTED).FULLPATH,AT('\',this.nodes(M.L_SELECTED).FULLPATH)))

  =REQUERY('VIEW_XMLY')
  sele view_xmly
  CASE M.L_NODES.KEY='DY'
  M.P_XMBH=substr(M.L_NODES.KEY,3,2)
  M.P_lyBH=substr(M.L_NODES.KEY,3,4)
  M.P_DYBH=RIGHT(M.L_NODES.KEY,LEN(M.L_NODES.KEY)-2)
  =REQUERY('VIEW_XMLC')
  IF RECCOUNT('VIEW_XMLC')=0
  SELE SF_DYXX
  SET ORDER TO DYBH
  SEEK M.P_DYBH
  IF FOUND()
  LCZS=SF_DYXX.DY_LCS
  ENDIF
  FOR I=1 TO LCZS
  SELECT VIEW_XMLC
  APPEND BLANK
  THISFORM.PAGEFRAME1.PAGE4.GRID1.afterROWCOLCHANGE
  ENDFOR
  GO TOP
  ENDIF
  THISFORM.PAGEFRAME1.PAGE3.CAPTION=ALLTRIM(M.L_NODES.TEXT)
  THISFORM.PAGEFRAME1.PAGE4.ENABLED=.T.
  THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(LEFT(this.nodes(M.L_SELECTED).FULLPATH,AT('\',this.nodes(M.L_SELECTED).FULLPATH)))

  =REQUERY('VIEW_XMdy')
  sele view_xmdy
  CASE M.L_NODES.KEY='LC'
  M.P_XMBH=substr(M.L_NODES.KEY,3,2)
  M.P_lyBH=substr(M.L_NODES.KEY,3,4)
  M.P_dyBH=substr(M.L_NODES.KEY,3,6)
  M.P_LCBH=RIGHT(M.L_NODES.KEY,LEN(M.L_NODES.KEY)-2)
  THISFORM.PAGEFRAME1.PAGE4.CAPTION=ALLTRIM(M.L_NODES.TEXT)
  THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(LEFT(this.nodes(M.L_SELECTED).FULLPATH,AT('\',this.nodes(M.L_SELECTED).FULLPATH)))
  =REQUERY('VIEW_XMlc')
  sele view_xmlc
  ENDCASE
  ELSE
  THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(this.nodes(M.L_SELECTED).TEXT)
  L_INDEX=M.L_SELECTED
  M.P_XMBH=RIGHT(this.NODES(M.L_SELECTED).KEY,LEN(this.NODES(M.L_SELECTED).KEY)-2)
  =REQUERY('VIEW_XMLY')
  IF RECCOUNT('VIEW_XMLY')=0
  SELE SF_XMXX
  SET ORDER TO XMBH
  SEEK M.P_XMBH
  IF FOUND()
  ZLS=SF_XMXX.XM_ZLS
  ENDIF 
  FOR I=1 TO ZLS
  SELECT VIEW_XMLY
  APPEND BLANK
  THISFORM.PAGEFRAME1.PAGE2.GRID1.AFTERROWCOLCHANGE
  ENDFOR
  GO TOP
  ENDIF
  ENDIF
  THISFORM.REFRESH

================================================

     控件的使用率的,就應(yīng)該好好一下了。在梅子這兒有TreeView控件的“玩轉(zhuǎn)系列”。!我也把她里面的精華截下來(lái),給大家少作說(shuō)明而已。你想系統(tǒng)的學(xué)一下呢,就下“玩轉(zhuǎn)系列”吧!
    簡(jiǎn)單的介紹:
TreeView控件用來(lái)顯示信息的分級(jí)視圖,如同Windows里的資源管理器的目錄。TreeView控件中的信息都有與之的Node。TreeView顯示Node的分層目錄結(jié)構(gòu),每個(gè)Node均由Label和其的位圖組成。在TreeView控件后,可以展開(kāi)和折疊、顯示或隱藏的節(jié)點(diǎn)。TreeView控件用來(lái)顯示文件和目錄結(jié)構(gòu)、文檔中的類層次、索引中的層次和分層目錄結(jié)構(gòu)的信息。
TreeView控件有3個(gè)屬性頁(yè),General頁(yè)、Font頁(yè)、Picture頁(yè)。
    TreeView控件屬性
1。LineStyle屬性
    該屬性設(shè)置本項(xiàng)控件中Node之間顯示的線條類型。格式:
表單.TreeView名.LineStyle=值
        值的范圍:
  0-TvwTreeLines   (缺省)三線顯示兄弟節(jié)點(diǎn)和父子節(jié)點(diǎn)之間的連線
  1-TvwRootLines   根(Root)線。除了上述的連線以外,還顯示根目錄之間的連線
需要注意的是:在設(shè)置該屬性前,設(shè)置Style屬性為TreeLine(三線)。

2。Style屬性
    該屬性返回和設(shè)置在TreeView控件中Node的圖形類型和文本類型。格式:
表單.TreeView名.Style=值
值的范圍:
  0-TvwTextOnly    文本
  1-TvwPictureText   圖象和文本
  2-TvwPlusMinusText   +/-文本
  3-TvwPlusPictureText   +/-、圖象文本
  4-TvwTreeLinesText   連線和文本
  5-TvwTreeLinesPictureText  連線、圖象和文本
  6-TvwTreeLinesPlusMinueText  連線、+/-和文本
  7-TvwTreeLinesPlusMinusPictureText (缺省)連線、+/-、圖象和文本
    
3。Indentation屬性
    該屬性設(shè)置各個(gè)新的Node縮進(jìn)的量度。格式如下:
表單.TreeView名.Indentation=值
值的范圍:
  大于0的數(shù),缺省值為38.00,默認(rèn)是磅

4。Nodes屬性和Index屬性
    該屬性設(shè)置訪問(wèn)TreeView控件使用Nodes集合,Index指定Nodes集合中的某節(jié)點(diǎn)。訪問(wèn)格式:
表單.TreeView名.Nodes(index)
  例如要表示當(dāng)前表單中Treenode1控件的Nodes的個(gè)節(jié)點(diǎn)為:
  thisform.treenode1.Nodes(3)

Nodes集合的屬性
1。Nodes集合的屬性
    該屬性指定當(dāng)前Nodes集合中的節(jié)點(diǎn)個(gè)數(shù)。格式:
表單.TreeView名.Nodes.Count

2。Text屬性
    該屬性指定Nodes集合中某個(gè)節(jié)點(diǎn)的文字信息。格式:
表單.TreeView名.Nodes(index).Text

3。Key屬性
    該屬性指定Nodes集合中某個(gè)節(jié)點(diǎn)的關(guān)鍵字。格式:工作幫手網(wǎng) www.yxtvg.com
表單.TreeView名.Nodes(index).Key

4。還有對(duì)Nodes集合中某個(gè)節(jié)點(diǎn)操作的屬性Root(返回當(dāng)前節(jié)點(diǎn)的根結(jié)節(jié))、FirsSibling(個(gè)兄弟節(jié)點(diǎn))和Next(下兄弟節(jié)點(diǎn))。
例如:
  thisform.treeview1.Nodes(3).Root.Key
  thisform.treeview1.nodes(3).firstsibling.key
  thisform.treeview1.nodes(3).next.key
上面的語(yǔ)句就分別返回了當(dāng)前表單中treeview1控件的個(gè)節(jié)點(diǎn)的根結(jié)節(jié)、個(gè)兄弟節(jié)點(diǎn)和下兄弟節(jié)點(diǎn)的關(guān)鍵字。

Nodes集合的方法
1。Clear方法
    該方法清除當(dāng)前Nodes集合中的所有節(jié)點(diǎn)。格式:
表單.TreeView名.Nodes.Clear

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多