2013-03-27 48 views
1

我有一個控制,來自TreeView,它反映了一些分層數據並以懶惰的方式創建節點。
當一個特定的節點正在展開時,我正在檢查它的Nodes集合中是否有一個虛擬節點,如果是,我將它移除,從數據源加載數據並創建實際的子節點。在TreeView上按「*」時如何檢測擴展結束?

爲節點數據加載包圍這種結構:

Cursor = Cursors.WaitCursor; 
BeginUpdate(); 
try 
{ 
    // node.Nodes.Add(...) 
} 
finally 
{ 
    EndUpdate(); 
    Cursor = Cursors.Default; 
} 

能正常工作,除了一種情況:當用戶按下*的節點,這將載入許多嵌套節點上(星號),和等等。 因爲上面的代碼,我得到一個閃爍的樹形視圖,帶有一個運行滾動條。

我認爲,與ExpandAll一個節點的擴展(這是*一樣)結束,當所有的子節點的展開,但這是錯誤的。

我想知道,有沒有辦法檢測擴展結束的情況下按*TreeView

回答

0

您能否檢測到*鍵在最上方的節點上被按下,並且編寫了一個循環遍歷所有子節點的遞歸函數,並且如果這些子節點有更多的子節點,則再次調用相同的函數,等等直到最頂端節點下面的所有節點都被擴展爲止。這將會展開所有按鍵被按下(並檢測到)時所展開的節點,它仍然會處理你的延遲加載。

+0

看起來像發明輪子(兩個輪子)。我想阻止這一點。 – Dennis 2013-03-27 13:43:41

0

在您的BeforeExpand事件中,您可以查看selectedNode的當前級別,如果它爲零,則它是頂級節點。在這種情況下,您將創建新的子節點並查看它們是否包含其他節點,如果是,則在其中添加一個虛擬節點。您的代碼可能與您當前擁有的代碼幾乎相同,但對於級別0而不是級別1.

+0

我不是在問「如何進行延遲加載」,對不起。 – Dennis 2013-03-28 05:35:22