Technorati 標籤: 多掛節點,treeview,AfterLabelEdit,VB
前面討論過,節點的名字在樹表和細節表中都儲存的有。當使用者通過點擊treeview節點的標籤來改節點名字的時候,如果不是多掛節點,就只需要把樹表、細節表、treeview控制項上node的text改掉,另外給同名樹發訊息改同節點(已存在的話)的名字就行了。如果是多掛節點的話,就得費點口舌討論一哈。
1、改多掛節點的名字涉及的諸多細節
如果使用者要改多掛節點的名字,那就問問她是想改該節點的所有其它掛的名字還是只改它自己的名字。
(1)如果是只改自己的名字(我們以後不妨稱這種只改自己不改同掛的情形為“獨改”)。那需要在細節表裡添個新節點,原來細節的多掛計數減一。具體步驟如下
a)首先改細節表的多掛計數,減一;
b)然後遍曆樹表,找到所有同掛 , 發同名樹(含自己)tag更改訊息(多掛計數位減一)
c)其次在細節表裡添新紀錄,名字用新名字,多掛計數為1,其他照抄原細節;
d)改樹表上節點的名字和細節ID
e)發同樹同節點改名改tag訊息,在訊息處理過程中改樹控制項上的標籤和tag,包括自己(這裡為了編程方便,在最初的afterlabeledit事件程序裡把cancel設為true)。
(2)如果是要改所有的掛的地方的名字,那就需要
a)首先改細節的名字;
b)其次遍曆樹表,找到其它同掛,在樹表裡改同掛(包括自己)的名字.
c)同時對每個同掛發同樹改名訊息,在訊息處理過程中改已存在節點的名字。
(3)如果是同樹獨改。那需要在細節表裡添個新節點,同樹多掛和異樹多掛的多掛計數做相應改動。具體步驟如下
a)首先細節表裡添新紀錄,名字用新名字,其他照抄原細節;
b)然後遍曆樹表,對所有同樹同掛,在樹表裡改名字, 發同名樹(含自己)tag/text更改訊息(多掛計數位等於同樹同掛計數、細節ID為新的細節ID、標籤為新名字)
c)其次然後遍曆樹表,對所有異樹同掛,發同樹同節點改tag訊息,多掛計數位改為原多掛計數減去同樹多掛計數。
d)最後把細節表裡的新細節的多掛計數改為同樹同掛計數,老細節的多掛計數改為原多掛計數減去同樹多掛計數
2、改節點名字的測試案例:
通過以上的討論,改名字的測試案例需要包括如下情況:
(0)拒絕改名的情況:根節點;新名字與其他名字重名。
(1)非多掛節點改名字。要分別試試多樹已存在同節點、多樹未展開同節點的情況。
a)檢查細節表裡的名字是否改了;
b)檢查樹表裡的名字是否改了.
c)檢查同樹上(包括自己)已存在節點的名字是否改了。
(2)多掛節點獨改:
a)檢查原細節多掛計數是否減一;
b)樹上其他同掛節點的多掛計數位是否減1
c)檢查新添細節記錄的各欄位是否正確:名字用新名字,多掛計數為1,其他照抄原細節;
d)檢查樹表上本節點的名字和細節ID是否正確
e)檢查本節點的同掛(包括自己)的名字和tag(新的detailid、多掛計數位1)是否正確
(3)多掛同樹獨改:
a)檢查細節表裡原細節多掛計數是否正確:原多掛計數減去同樹多掛計數
c)檢查細節表裡新添細節記錄的各欄位是否正確:名字用新名字,多掛計數為同樹多掛計數,其他照抄原細節;
b)檢查樹表上異樹同掛節點的多掛計數位是否正確:原多掛計數減去同樹多掛計數
d)檢查樹表上同樹同掛節點的名字和細節ID和是否正確
e)檢查樹控制項上,同樹同掛(包括自己)的名字和tag(新的detailid、多掛計數位為同樹同掛)是否正確,異樹同掛的tag的多掛標誌位是否正確。
(4)多掛節點全改。要試試單樹、雙樹節點已展開、雙樹節點未展開的情況:
a)檢查細節表裡的名字是否改了;
b)檢查同掛(包括自己)樹表裡的名字是否改了.
c)檢查每個同掛(包括自己)的同樹上已存在節點的名字是否改了。