7任務(wù)七-利用高級(jí)控件完善系統(tǒng)課件_第1頁
7任務(wù)七-利用高級(jí)控件完善系統(tǒng)課件_第2頁
7任務(wù)七-利用高級(jí)控件完善系統(tǒng)課件_第3頁
7任務(wù)七-利用高級(jí)控件完善系統(tǒng)課件_第4頁
7任務(wù)七-利用高級(jí)控件完善系統(tǒng)課件_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VB.NET程序設(shè)計(jì)任務(wù)七利用高級(jí)控件完善系統(tǒng)VB.NET程序設(shè)計(jì)任務(wù)七利用高級(jí)控件完善系統(tǒng)本章學(xué)習(xí)目標(biāo):掌握TreeView、Splitter控件的使用了解過程的遞歸調(diào)用TreeView控件中顯示數(shù)據(jù)庫中的數(shù)據(jù)掌握DataGridView控件的使用目標(biāo)本章學(xué)習(xí)目標(biāo):目標(biāo)每個(gè)企業(yè)或機(jī)構(gòu)都有層次性,在程序中要顯示出企業(yè)或機(jī)構(gòu)的組織關(guān)系,就要利用樹結(jié)構(gòu)啦。 怎樣把存放在數(shù)據(jù)庫中的數(shù)據(jù)顯示成樹的結(jié)構(gòu)?問題的引入每個(gè)企業(yè)或機(jī)構(gòu)都有層次性,在程序 在“機(jī)構(gòu)設(shè)計(jì)情況”窗體中增加TreeView、Splitter控件??梢园褦?shù)據(jù)庫中的數(shù)據(jù)在TreeView上顯示出來,在單擊某節(jié)點(diǎn)時(shí),把該節(jié)點(diǎn)對(duì)應(yīng)的一些信息在文本框TextBox里顯示出來。 任務(wù)TreeView控件Splitter控件 在“機(jī)構(gòu)設(shè)計(jì)情況”窗體中增加TreeView、S任務(wù):

在DataGridView控件中顯示數(shù)據(jù)庫中的數(shù)據(jù)

任務(wù)DataGridView控件任務(wù):任務(wù)DataGridView控件

TreeView控件用于創(chuàng)建具有樹形節(jié)點(diǎn)的層次結(jié)構(gòu)列表該控件中每個(gè)節(jié)點(diǎn)還可以包含子節(jié)點(diǎn)父節(jié)點(diǎn)能夠以展開或折疊方式顯示項(xiàng)目列表樹狀列表的每個(gè)節(jié)點(diǎn)都是TreeNode類的實(shí)例TreeView控件的相關(guān)知識(shí)TreeView控件用于創(chuàng)建具有樹形節(jié)點(diǎn)的層次結(jié)構(gòu)使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes所有節(jié)點(diǎn)(TreeNode)組成集合(代碼中單獨(dú)使用時(shí),表示根節(jié)點(diǎn))SelectedNode返回或設(shè)定當(dāng)前選定的節(jié)點(diǎn)。方法描述ExpendAll展開列表樹的全部節(jié)點(diǎn).該方法沒有參數(shù)事件描述AfterSelect當(dāng)用戶在TreeView控件中單擊節(jié)點(diǎn)時(shí)觸發(fā)AfterSelect事件TreeView控件的常用屬性、方法和事件:使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes所有節(jié)使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)(TreeNode)組成的集合Text節(jié)點(diǎn)顯示的內(nèi)容Parent返回當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)Checked節(jié)點(diǎn)是否被選中方法描述New()TreeNode的構(gòu)造函數(shù)。創(chuàng)建顯示內(nèi)容為空的節(jié)點(diǎn)New(strAsString)TreeNode的構(gòu)造函數(shù)。創(chuàng)建顯示內(nèi)容為str參數(shù)的值的節(jié)點(diǎn)Remove()刪除當(dāng)前節(jié)點(diǎn)樹狀列表的每個(gè)節(jié)點(diǎn)都是TreeNode類的實(shí)例,注意每個(gè)節(jié)點(diǎn)TreeNode還有一個(gè)Nodes屬性。TreeNode類常用屬性、方法:使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes當(dāng)前節(jié)使用TreeView控件設(shè)計(jì)樹狀列表方法描述Add(strAsString)在相應(yīng)節(jié)點(diǎn)下添加子節(jié)點(diǎn),子節(jié)點(diǎn)名為str的參數(shù)值A(chǔ)dd(TreeNode實(shí)例)在相應(yīng)節(jié)點(diǎn)下添加子節(jié)點(diǎn)TreeNode實(shí)例Remove(TreeNode實(shí)例)在相應(yīng)節(jié)點(diǎn)下刪除TreeNode實(shí)例的子節(jié)點(diǎn)Clear()刪除相應(yīng)節(jié)點(diǎn)下的所有子節(jié)點(diǎn)Nodes屬性是TreeNodeCollection類的一個(gè)實(shí)例,是樹狀列表中所有節(jié)點(diǎn)構(gòu)成的集合。可以通過Nodes(索引值)來獲得索引位置的節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)的索引為0,第二個(gè)為1,依次類推。TreeNodeCollection類的常用方法如下:使用TreeView控件設(shè)計(jì)樹狀列表方法描述Add(str設(shè)計(jì)窗體時(shí)在TreeView中添加節(jié)點(diǎn)的步驟拖動(dòng)TreeView控件到窗體中單擊選中Nodes屬性,然后單擊省略號(hào)按鈕,打開“樹節(jié)點(diǎn)編輯器”單擊“添加根”按鈕添加根節(jié)點(diǎn)單擊“添加子項(xiàng)”按鈕添加當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)單擊“刪除”按鈕刪除當(dāng)前節(jié)點(diǎn)設(shè)計(jì)窗體時(shí)在TreeView中添加節(jié)點(diǎn)的步驟拖動(dòng)TreeVi程序運(yùn)行時(shí)在TreeView中加入節(jié)點(diǎn)的方法是:使用TreeView控件Nodes屬性的Add方法來加入根節(jié)點(diǎn),使用某個(gè)節(jié)點(diǎn)的Nodes屬性的Add方法來加入子節(jié)點(diǎn)。如要建立如圖所示的樹視圖的代碼:TreeView1.Nodes.Add(“省醫(yī)藥集團(tuán)”)DimnewNodeAsTreeNodenewNode=newTreeNode(“省醫(yī)藥集團(tuán)機(jī)關(guān)”)TreeView1.Nodes(0).Nodes.Add(newNode)‘newNode.Nodes.Add(“董事會(huì)秘書處”)newNode=newTreeNode(“省醫(yī)藥公司”)TreeView1.Nodes(0).Nodes.Add(newNode)’第1個(gè)根節(jié)點(diǎn)下添加子節(jié)點(diǎn)newNode.Nodes.Add(“經(jīng)理辦公室”)’在省醫(yī)藥公司節(jié)點(diǎn)下添加子節(jié)點(diǎn)‘TreeView1.Nodes.Remove(TreeView1.SelectedNode)‘刪除選定的節(jié)點(diǎn)程序運(yùn)行時(shí)在TreeView中添加節(jié)點(diǎn)程序運(yùn)行時(shí)在TreeView中加入節(jié)點(diǎn)隨堂實(shí)訓(xùn)

1、在窗體設(shè)計(jì)中創(chuàng)建如圖的樹視圖。2、然后再利用代碼來創(chuàng)建如圖的樹視圖參考代碼1參考代碼2隨堂實(shí)訓(xùn)1、在窗體設(shè)計(jì)中創(chuàng)建如圖的樹視圖。參考代碼1參考代隨堂實(shí)訓(xùn)3、用代碼創(chuàng)建如圖所示的樹結(jié)構(gòu)圖隨堂實(shí)訓(xùn)3、用代碼創(chuàng)建如圖所示的樹結(jié)構(gòu)圖Splitter控件Splitter控件用于在運(yùn)行時(shí)調(diào)整??靠丶拇笮?。Splitter控件常用于窗體上控件所顯示的數(shù)據(jù)長(zhǎng)度可變,如Windows資源管理器,它的數(shù)據(jù)窗格所包含的信息在不同的時(shí)間有不同的寬度Splitter控件Splitter控Splitter控件

為使用戶能夠在運(yùn)行時(shí)調(diào)整停靠控件的大小,先將調(diào)整大小的控件??吭谌萜鞯囊粭l邊緣(Dock屬性),然后將Splitter控件??吭谠撊萜鞯耐粋?cè)。

如圖所示樣式設(shè)置屬性如下:

TreeView1.Dock=LeftSplitter1.Dock=LeftGroupBox1.Dock=FillGroupBoxTreeViewSplitterSplitter控件為使用戶能夠在運(yùn)行時(shí)調(diào)整??靠丶^程的遞歸調(diào)用SubF1()F1() EndSubSubF1()F2() EndSubSubF2()F1() EndSub圖1圖2在調(diào)用一個(gè)過程中又出現(xiàn)直接或間接地調(diào)用該過程本身,稱為過程的遞歸調(diào)用。圖1在調(diào)用F1的過程中,又要調(diào)用F1過程,這就是直接調(diào)用本過程圖2在調(diào)用F1的過程中要調(diào)用F2,而在調(diào)用F2過程中又要調(diào)用F1,這就是間接調(diào)用過程本身過程的遞歸調(diào)用SubF1()SubF1()圖1圖2過程的遞歸調(diào)用

例如:有3個(gè)人坐在一起,問第3個(gè)人多少歲?他說比第2個(gè)人大2歲。問第2個(gè)人歲數(shù),他說比第1個(gè)人大2歲。最后問第1個(gè)人,他說10歲,請(qǐng)問第3人多大上面兩種遞歸調(diào)用都是無終止的自身調(diào)用,這是不應(yīng)該出現(xiàn)的。只應(yīng)該出現(xiàn)次數(shù)有限的、有終止的遞歸調(diào)用。這可以用條件控制,只有某個(gè)條件成立才繼續(xù)執(zhí)行遞歸調(diào)用,否則不再繼續(xù)。過程的遞歸調(diào)用例如:有3個(gè)人坐在一起,問第3過程的遞歸調(diào)用

顯然該例子是個(gè)遞歸問題。要求第3個(gè)人的年齡,就要知道第2個(gè)人的年齡,而第2個(gè)人的年齡也不知道,他的年齡取決于第1個(gè)人的年齡。

age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10其過程如下:age(3)=age(2)+2age(3)=14age(2)=age(1)+2age(2)=12age(1)

=10

過程的遞歸調(diào)用顯然該例子是個(gè)遞歸問題。要求第過程的遞歸調(diào)用

從圖可知,求解分成兩個(gè)階段:第一個(gè)階段是”回推”,即將第n個(gè)人的年齡表示為第(n-1)個(gè)人年齡……,直到第1個(gè)人的年齡。此時(shí)age(1)已知,不必再前推。然后開始第二階段,采用遞推方法,從第1個(gè)人的已知推算出第2個(gè)人的年齡……。一個(gè)遞歸的問題可以分為“回推”和“遞推”兩個(gè)階段。要經(jīng)歷許多步才能求出最后的值,還必須要有一個(gè)結(jié)束遞歸的條件。例如,age(1)=10,就是使遞歸結(jié)束的條件過程的遞歸調(diào)用從圖可知,求解分成兩個(gè)階段過程的遞歸調(diào)用可以用一個(gè)函數(shù)來描述上述過程:

Functionage(ByValnasInteger)AsInteger DimcAsInteger ifn=1then c=10 else c=age(n-1)+2‘遞歸調(diào)用

Endif returncEndFunction

Age(3)得到age(3)c=age(2)+2c=age(1)+2c=10age函數(shù)n=3age函數(shù)n=2age函數(shù)n=1Age(1)=10Age(2)=12Age(3)=14過程的遞歸調(diào)用可以用一個(gè)函數(shù)來描述上述過程:Age(過程的遞歸調(diào)用‘顯示TreeView控件中的所有節(jié)點(diǎn)SubPrintNodes()ForEachtrNodeAsTreeNodeintreeView1.Nodes‘此處Nodes表示樹視圖控件的根節(jié)點(diǎn)PrintRecursive(trNode)NextEndSub

SubPrintRecursive(ByValtrNodeAsTreeNode)MessageBox.Show(trNode.Text)ForEachtnAsTreeNodeintrNode.Nodes‘此處Nodes表示的是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)

PrintRecursive(tn) ‘遞歸調(diào)用NextEndSub

遍歷TreeView控件中每個(gè)節(jié)點(diǎn),利用遞歸方法可完成此操作,該方法循環(huán)訪問每個(gè)樹集合中的每個(gè)節(jié)點(diǎn)。

過程的遞歸調(diào)用‘顯示TreeView控件中的所有節(jié)點(diǎn)從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示字段名類別AbsIndexParentIndex字段類型文本數(shù)字?jǐn)?shù)字說明節(jié)點(diǎn)顯示的內(nèi)容節(jié)點(diǎn)索引對(duì)應(yīng)的父節(jié)點(diǎn)索引有如下的數(shù)據(jù)表(節(jié)點(diǎn)表):該數(shù)據(jù)表中記錄如下從數(shù)據(jù)表記錄中:ParentIndex=-1表示該節(jié)點(diǎn)為TreeView控件的根節(jié)點(diǎn).表中對(duì)應(yīng)的TreeView控件節(jié)點(diǎn)如圖所示:從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示字段名類別Ab‘從數(shù)據(jù)表中以absIndex字段順序查詢出數(shù)據(jù)‘調(diào)用InitTree(treeView1.Nodes,“-1”)過程。該過程如下SubInitTree(ByRefnodesAsTreeNodeCollection,ByValsParentIndexAsString)DimtmpNodeAsTreeNode,absIndexAsString‘選出數(shù)據(jù)源中ParentIndex為sParentIndex數(shù)據(jù)行,放在行集合DataRow的drs中

‘循環(huán)添加TreeNode,即添加ParentIndex=sParentIndex的所有記錄(子節(jié)點(diǎn))ForEachdrAsDataRowIndrs'獲得節(jié)點(diǎn)所需數(shù)據(jù)

tmpNode=NewTreeNodetmpNode.Text=dr("類別")absIndex=dr("AbsIndex")nodes.Add(tmpNode)'添加節(jié)點(diǎn)

‘遞歸調(diào)用,添加子節(jié)點(diǎn)下的所有子節(jié)點(diǎn)

InitTree(nodes(nodes.Count-1).Nodes,absIndex)NextEndSub從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示

要利用上面數(shù)據(jù)表中的數(shù)據(jù)在TreeView控件上顯示,也要用到遞歸方法。

把和節(jié)點(diǎn)有關(guān)的表比如“節(jié)點(diǎn)表”直接拖到窗體上,接著,不用的控件刪除,比如:DataGridView,BindingNavigator。然后添加一TreeView控件。最終界面如圖所示?!畯臄?shù)據(jù)表中以absIndex字段順序查詢出數(shù)據(jù)從數(shù)據(jù)庫中從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---代碼從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---代碼從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---運(yùn)行效果從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---運(yùn)行效果隨堂實(shí)訓(xùn)利用數(shù)據(jù)庫節(jié)點(diǎn)表中的數(shù)據(jù),來創(chuàng)建如下的樹視圖隨堂實(shí)訓(xùn)利用數(shù)據(jù)庫節(jié)點(diǎn)表中的數(shù)據(jù),來創(chuàng)建如下的關(guān)于DataGridView控件當(dāng)需要在Windows窗體應(yīng)用程序中顯示表格數(shù)據(jù)時(shí),應(yīng)首先考慮使用DataGridView控件。關(guān)于DataGridView控件當(dāng)需使用DataGridView控制外觀顯示方式---調(diào)整列寬調(diào)整列寬通過屬性AutoSizeColumnsMode實(shí)現(xiàn),取值主要包括:AllCells:調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。AllCellsExceptHeader:調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格。ColumnHeader:調(diào)整列寬,以適合列標(biāo)題單元格的內(nèi)容。DisplayCells:調(diào)整列寬,以適合當(dāng)前屏幕上顯示的行的列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。DisplayCellsExceptHeader:調(diào)整列寬,以適合當(dāng)前屏幕上顯示的行的列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格使用DataGridView控制外觀顯示方式---調(diào)使用DataGridView控制外觀顯示方式---某列單元格顯示格式與字體通過屬性ColumnsDefaultCellStyle設(shè)置:使用DataGridView控制外觀顯示方式---某列單元使用DataGridView控制外觀顯示方式---某列單元格顯示格式與字體外觀格式設(shè)置顏色和字體等Format設(shè)置單元格的格式字符串設(shè)置了格式的列未設(shè)置格式的列使用DataGridView控制外觀顯示方式---某列單元使用DataGridView控制外觀顯示方式---奇數(shù)行的單元格樣式使用DataGridView控制外觀顯示方式---奇數(shù)行的小結(jié)本任務(wù)學(xué)習(xí)了TreeView、DataGridView等高級(jí)控件的使用和過程的遞歸調(diào)用。小結(jié)本任務(wù)學(xué)習(xí)了TreeView、DataG完成數(shù)據(jù)庫中的數(shù)據(jù)在TreeView控件上的顯示。習(xí)題完成數(shù)據(jù)庫中的數(shù)據(jù)在Tre實(shí)訓(xùn)單擊TreeView的某節(jié)點(diǎn)時(shí),把該節(jié)點(diǎn)對(duì)應(yīng)的一些信息在文本框TextBox里顯示出來。實(shí)訓(xùn)單擊TreeView的某節(jié)點(diǎn)時(shí),把該節(jié)點(diǎn)對(duì)應(yīng)的實(shí)訓(xùn)—參考答案(新版本不用DataView對(duì)象)實(shí)訓(xùn)—參考答案(新版本不用DataView對(duì)象)實(shí)訓(xùn)—參考答案step1創(chuàng)建一樹節(jié)點(diǎn)類(TreeNodeData),然后:

1)添加五個(gè)Public字段:PublicAbsIndexAsIntegerPublicItemIndexAsIntegerPublicItemLevelAsIntegerPublicParentIndexAsIntegerPublicKindCodeAsString

PublicDepCodeAsString2)添加一有參數(shù)的構(gòu)造函數(shù)用來初始化五個(gè)字段的。

SubNew(ByValsAbsIndexAsInteger,ByValsItemIndexAsInteger,ByValsItemLevelAsInteger,_ByValsParentIndexAsInteger,ByValsKindCodeAsString,ByValsDepCodeAsString)AbsIndex=sAbsIndexItemIndex=sItemIndexItemLevel=sItemLevelParentIndex=sParentIndexKindCode=sKindCodeDepCode=sDepCodeEndSub

實(shí)訓(xùn)—參考答案step1創(chuàng)建一樹節(jié)點(diǎn)類(TreeNodeDa實(shí)訓(xùn)—參考答案step2在把數(shù)據(jù)庫里的相關(guān)數(shù)據(jù)顯示在TreeView的過程中,使用TreeNodeData類保存一些信息。實(shí)訓(xùn)—參考答案step2在把數(shù)據(jù)庫里的相關(guān)數(shù)據(jù)顯示在Tree實(shí)訓(xùn)—參考答案step3添加TreeView的AfterSelect事件,在該事件中,根據(jù)字段“單位編號(hào)”進(jìn)行篩選。實(shí)訓(xùn)—參考答案step3添加TreeView的AfterSeVB.NET程序設(shè)計(jì)任務(wù)七利用高級(jí)控件完善系統(tǒng)VB.NET程序設(shè)計(jì)任務(wù)七利用高級(jí)控件完善系統(tǒng)本章學(xué)習(xí)目標(biāo):掌握TreeView、Splitter控件的使用了解過程的遞歸調(diào)用TreeView控件中顯示數(shù)據(jù)庫中的數(shù)據(jù)掌握DataGridView控件的使用目標(biāo)本章學(xué)習(xí)目標(biāo):目標(biāo)每個(gè)企業(yè)或機(jī)構(gòu)都有層次性,在程序中要顯示出企業(yè)或機(jī)構(gòu)的組織關(guān)系,就要利用樹結(jié)構(gòu)啦。 怎樣把存放在數(shù)據(jù)庫中的數(shù)據(jù)顯示成樹的結(jié)構(gòu)?問題的引入每個(gè)企業(yè)或機(jī)構(gòu)都有層次性,在程序 在“機(jī)構(gòu)設(shè)計(jì)情況”窗體中增加TreeView、Splitter控件??梢园褦?shù)據(jù)庫中的數(shù)據(jù)在TreeView上顯示出來,在單擊某節(jié)點(diǎn)時(shí),把該節(jié)點(diǎn)對(duì)應(yīng)的一些信息在文本框TextBox里顯示出來。 任務(wù)TreeView控件Splitter控件 在“機(jī)構(gòu)設(shè)計(jì)情況”窗體中增加TreeView、S任務(wù):

在DataGridView控件中顯示數(shù)據(jù)庫中的數(shù)據(jù)

任務(wù)DataGridView控件任務(wù):任務(wù)DataGridView控件

TreeView控件用于創(chuàng)建具有樹形節(jié)點(diǎn)的層次結(jié)構(gòu)列表該控件中每個(gè)節(jié)點(diǎn)還可以包含子節(jié)點(diǎn)父節(jié)點(diǎn)能夠以展開或折疊方式顯示項(xiàng)目列表樹狀列表的每個(gè)節(jié)點(diǎn)都是TreeNode類的實(shí)例TreeView控件的相關(guān)知識(shí)TreeView控件用于創(chuàng)建具有樹形節(jié)點(diǎn)的層次結(jié)構(gòu)使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes所有節(jié)點(diǎn)(TreeNode)組成集合(代碼中單獨(dú)使用時(shí),表示根節(jié)點(diǎn))SelectedNode返回或設(shè)定當(dāng)前選定的節(jié)點(diǎn)。方法描述ExpendAll展開列表樹的全部節(jié)點(diǎn).該方法沒有參數(shù)事件描述AfterSelect當(dāng)用戶在TreeView控件中單擊節(jié)點(diǎn)時(shí)觸發(fā)AfterSelect事件TreeView控件的常用屬性、方法和事件:使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes所有節(jié)使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)(TreeNode)組成的集合Text節(jié)點(diǎn)顯示的內(nèi)容Parent返回當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)Checked節(jié)點(diǎn)是否被選中方法描述New()TreeNode的構(gòu)造函數(shù)。創(chuàng)建顯示內(nèi)容為空的節(jié)點(diǎn)New(strAsString)TreeNode的構(gòu)造函數(shù)。創(chuàng)建顯示內(nèi)容為str參數(shù)的值的節(jié)點(diǎn)Remove()刪除當(dāng)前節(jié)點(diǎn)樹狀列表的每個(gè)節(jié)點(diǎn)都是TreeNode類的實(shí)例,注意每個(gè)節(jié)點(diǎn)TreeNode還有一個(gè)Nodes屬性。TreeNode類常用屬性、方法:使用TreeView控件設(shè)計(jì)樹狀列表屬性描述Nodes當(dāng)前節(jié)使用TreeView控件設(shè)計(jì)樹狀列表方法描述Add(strAsString)在相應(yīng)節(jié)點(diǎn)下添加子節(jié)點(diǎn),子節(jié)點(diǎn)名為str的參數(shù)值A(chǔ)dd(TreeNode實(shí)例)在相應(yīng)節(jié)點(diǎn)下添加子節(jié)點(diǎn)TreeNode實(shí)例Remove(TreeNode實(shí)例)在相應(yīng)節(jié)點(diǎn)下刪除TreeNode實(shí)例的子節(jié)點(diǎn)Clear()刪除相應(yīng)節(jié)點(diǎn)下的所有子節(jié)點(diǎn)Nodes屬性是TreeNodeCollection類的一個(gè)實(shí)例,是樹狀列表中所有節(jié)點(diǎn)構(gòu)成的集合??梢酝ㄟ^Nodes(索引值)來獲得索引位置的節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)的索引為0,第二個(gè)為1,依次類推。TreeNodeCollection類的常用方法如下:使用TreeView控件設(shè)計(jì)樹狀列表方法描述Add(str設(shè)計(jì)窗體時(shí)在TreeView中添加節(jié)點(diǎn)的步驟拖動(dòng)TreeView控件到窗體中單擊選中Nodes屬性,然后單擊省略號(hào)按鈕,打開“樹節(jié)點(diǎn)編輯器”單擊“添加根”按鈕添加根節(jié)點(diǎn)單擊“添加子項(xiàng)”按鈕添加當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)單擊“刪除”按鈕刪除當(dāng)前節(jié)點(diǎn)設(shè)計(jì)窗體時(shí)在TreeView中添加節(jié)點(diǎn)的步驟拖動(dòng)TreeVi程序運(yùn)行時(shí)在TreeView中加入節(jié)點(diǎn)的方法是:使用TreeView控件Nodes屬性的Add方法來加入根節(jié)點(diǎn),使用某個(gè)節(jié)點(diǎn)的Nodes屬性的Add方法來加入子節(jié)點(diǎn)。如要建立如圖所示的樹視圖的代碼:TreeView1.Nodes.Add(“省醫(yī)藥集團(tuán)”)DimnewNodeAsTreeNodenewNode=newTreeNode(“省醫(yī)藥集團(tuán)機(jī)關(guān)”)TreeView1.Nodes(0).Nodes.Add(newNode)‘newNode.Nodes.Add(“董事會(huì)秘書處”)newNode=newTreeNode(“省醫(yī)藥公司”)TreeView1.Nodes(0).Nodes.Add(newNode)’第1個(gè)根節(jié)點(diǎn)下添加子節(jié)點(diǎn)newNode.Nodes.Add(“經(jīng)理辦公室”)’在省醫(yī)藥公司節(jié)點(diǎn)下添加子節(jié)點(diǎn)‘TreeView1.Nodes.Remove(TreeView1.SelectedNode)‘刪除選定的節(jié)點(diǎn)程序運(yùn)行時(shí)在TreeView中添加節(jié)點(diǎn)程序運(yùn)行時(shí)在TreeView中加入節(jié)點(diǎn)隨堂實(shí)訓(xùn)

1、在窗體設(shè)計(jì)中創(chuàng)建如圖的樹視圖。2、然后再利用代碼來創(chuàng)建如圖的樹視圖參考代碼1參考代碼2隨堂實(shí)訓(xùn)1、在窗體設(shè)計(jì)中創(chuàng)建如圖的樹視圖。參考代碼1參考代隨堂實(shí)訓(xùn)3、用代碼創(chuàng)建如圖所示的樹結(jié)構(gòu)圖隨堂實(shí)訓(xùn)3、用代碼創(chuàng)建如圖所示的樹結(jié)構(gòu)圖Splitter控件Splitter控件用于在運(yùn)行時(shí)調(diào)整??靠丶拇笮 plitter控件常用于窗體上控件所顯示的數(shù)據(jù)長(zhǎng)度可變,如Windows資源管理器,它的數(shù)據(jù)窗格所包含的信息在不同的時(shí)間有不同的寬度Splitter控件Splitter控Splitter控件

為使用戶能夠在運(yùn)行時(shí)調(diào)整??靠丶拇笮。葘⒄{(diào)整大小的控件??吭谌萜鞯囊粭l邊緣(Dock屬性),然后將Splitter控件??吭谠撊萜鞯耐粋?cè)。

如圖所示樣式設(shè)置屬性如下:

TreeView1.Dock=LeftSplitter1.Dock=LeftGroupBox1.Dock=FillGroupBoxTreeViewSplitterSplitter控件為使用戶能夠在運(yùn)行時(shí)調(diào)整??靠丶^程的遞歸調(diào)用SubF1()F1() EndSubSubF1()F2() EndSubSubF2()F1() EndSub圖1圖2在調(diào)用一個(gè)過程中又出現(xiàn)直接或間接地調(diào)用該過程本身,稱為過程的遞歸調(diào)用。圖1在調(diào)用F1的過程中,又要調(diào)用F1過程,這就是直接調(diào)用本過程圖2在調(diào)用F1的過程中要調(diào)用F2,而在調(diào)用F2過程中又要調(diào)用F1,這就是間接調(diào)用過程本身過程的遞歸調(diào)用SubF1()SubF1()圖1圖2過程的遞歸調(diào)用

例如:有3個(gè)人坐在一起,問第3個(gè)人多少歲?他說比第2個(gè)人大2歲。問第2個(gè)人歲數(shù),他說比第1個(gè)人大2歲。最后問第1個(gè)人,他說10歲,請(qǐng)問第3人多大上面兩種遞歸調(diào)用都是無終止的自身調(diào)用,這是不應(yīng)該出現(xiàn)的。只應(yīng)該出現(xiàn)次數(shù)有限的、有終止的遞歸調(diào)用。這可以用條件控制,只有某個(gè)條件成立才繼續(xù)執(zhí)行遞歸調(diào)用,否則不再繼續(xù)。過程的遞歸調(diào)用例如:有3個(gè)人坐在一起,問第3過程的遞歸調(diào)用

顯然該例子是個(gè)遞歸問題。要求第3個(gè)人的年齡,就要知道第2個(gè)人的年齡,而第2個(gè)人的年齡也不知道,他的年齡取決于第1個(gè)人的年齡。

age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10其過程如下:age(3)=age(2)+2age(3)=14age(2)=age(1)+2age(2)=12age(1)

=10

過程的遞歸調(diào)用顯然該例子是個(gè)遞歸問題。要求第過程的遞歸調(diào)用

從圖可知,求解分成兩個(gè)階段:第一個(gè)階段是”回推”,即將第n個(gè)人的年齡表示為第(n-1)個(gè)人年齡……,直到第1個(gè)人的年齡。此時(shí)age(1)已知,不必再前推。然后開始第二階段,采用遞推方法,從第1個(gè)人的已知推算出第2個(gè)人的年齡……。一個(gè)遞歸的問題可以分為“回推”和“遞推”兩個(gè)階段。要經(jīng)歷許多步才能求出最后的值,還必須要有一個(gè)結(jié)束遞歸的條件。例如,age(1)=10,就是使遞歸結(jié)束的條件過程的遞歸調(diào)用從圖可知,求解分成兩個(gè)階段過程的遞歸調(diào)用可以用一個(gè)函數(shù)來描述上述過程:

Functionage(ByValnasInteger)AsInteger DimcAsInteger ifn=1then c=10 else c=age(n-1)+2‘遞歸調(diào)用

Endif returncEndFunction

Age(3)得到age(3)c=age(2)+2c=age(1)+2c=10age函數(shù)n=3age函數(shù)n=2age函數(shù)n=1Age(1)=10Age(2)=12Age(3)=14過程的遞歸調(diào)用可以用一個(gè)函數(shù)來描述上述過程:Age(過程的遞歸調(diào)用‘顯示TreeView控件中的所有節(jié)點(diǎn)SubPrintNodes()ForEachtrNodeAsTreeNodeintreeView1.Nodes‘此處Nodes表示樹視圖控件的根節(jié)點(diǎn)PrintRecursive(trNode)NextEndSub

SubPrintRecursive(ByValtrNodeAsTreeNode)MessageBox.Show(trNode.Text)ForEachtnAsTreeNodeintrNode.Nodes‘此處Nodes表示的是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)

PrintRecursive(tn) ‘遞歸調(diào)用NextEndSub

遍歷TreeView控件中每個(gè)節(jié)點(diǎn),利用遞歸方法可完成此操作,該方法循環(huán)訪問每個(gè)樹集合中的每個(gè)節(jié)點(diǎn)。

過程的遞歸調(diào)用‘顯示TreeView控件中的所有節(jié)點(diǎn)從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示字段名類別AbsIndexParentIndex字段類型文本數(shù)字?jǐn)?shù)字說明節(jié)點(diǎn)顯示的內(nèi)容節(jié)點(diǎn)索引對(duì)應(yīng)的父節(jié)點(diǎn)索引有如下的數(shù)據(jù)表(節(jié)點(diǎn)表):該數(shù)據(jù)表中記錄如下從數(shù)據(jù)表記錄中:ParentIndex=-1表示該節(jié)點(diǎn)為TreeView控件的根節(jié)點(diǎn).表中對(duì)應(yīng)的TreeView控件節(jié)點(diǎn)如圖所示:從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示字段名類別Ab‘從數(shù)據(jù)表中以absIndex字段順序查詢出數(shù)據(jù)‘調(diào)用InitTree(treeView1.Nodes,“-1”)過程。該過程如下SubInitTree(ByRefnodesAsTreeNodeCollection,ByValsParentIndexAsString)DimtmpNodeAsTreeNode,absIndexAsString‘選出數(shù)據(jù)源中ParentIndex為sParentIndex數(shù)據(jù)行,放在行集合DataRow的drs中

‘循環(huán)添加TreeNode,即添加ParentIndex=sParentIndex的所有記錄(子節(jié)點(diǎn))ForEachdrAsDataRowIndrs'獲得節(jié)點(diǎn)所需數(shù)據(jù)

tmpNode=NewTreeNodetmpNode.Text=dr("類別")absIndex=dr("AbsIndex")nodes.Add(tmpNode)'添加節(jié)點(diǎn)

‘遞歸調(diào)用,添加子節(jié)點(diǎn)下的所有子節(jié)點(diǎn)

InitTree(nodes(nodes.Count-1).Nodes,absIndex)NextEndSub從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示

要利用上面數(shù)據(jù)表中的數(shù)據(jù)在TreeView控件上顯示,也要用到遞歸方法。

把和節(jié)點(diǎn)有關(guān)的表比如“節(jié)點(diǎn)表”直接拖到窗體上,接著,不用的控件刪除,比如:DataGridView,BindingNavigator。然后添加一TreeView控件。最終界面如圖所示?!畯臄?shù)據(jù)表中以absIndex字段順序查詢出數(shù)據(jù)從數(shù)據(jù)庫中從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---代碼從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---代碼從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---運(yùn)行效果從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---運(yùn)行效果隨堂實(shí)訓(xùn)利用數(shù)據(jù)庫節(jié)點(diǎn)表中的數(shù)據(jù),來創(chuàng)建如下的樹視圖隨堂實(shí)訓(xùn)利用數(shù)據(jù)庫節(jié)點(diǎn)表中的數(shù)據(jù),來創(chuàng)建如下的關(guān)于DataGridView控件當(dāng)需要在Windows窗體應(yīng)用程序中顯示表格數(shù)據(jù)時(shí),應(yīng)首先考慮使用DataGridView控件。關(guān)于DataGridView控件當(dāng)需使用DataGridView控制外觀顯示方式---調(diào)整列寬調(diào)整列寬通過屬性AutoSizeColumnsMode實(shí)現(xiàn),取值主要包括:AllCells:調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。AllCellsExceptHeader:調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格。ColumnHeader:調(diào)整

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論