2010-06-21 54 views
0

我有在看在文件夾列表更改某些文件,其中包括孩子(如果一個文件夾的注視下,它會看所有的孩子)中的程序列表。我想增加從這個過程中排除某些孩子的能力,但我不確定如何最好地處理它或存儲這個「規則」。例如,here'a一棵樹,我可能看:管理監視的文件夾/文件和排除,包括兒童

Root 
    Folder1 
    SubFolder1 
     File1 
     File2 
    Folder2 
    File3 
    File4 

我想允許用戶選擇一個文件夾(如「根」),它會自動選擇所有的孩子。如果他們取消選中一個文件夾(如Folder1),我想取消選中該文件夾中的所有孩子,但是如果他們檢查了孩子的孩子(如File1),我想檢查它的所有孩子(或者,在這種情況下,只是看File1,因爲它沒有孩子)。

我將這些數據存儲爲用戶已採取某種操作(+或 - )的節點列表,然後沿着文件夾列表逐級向下走,直到一次到達用戶採取不同操作的節點,然後繼續進入文件夾/文件,檢查每一步,看看用戶是否對該節點採取了特定的操作,然後將其傳播到所有子節點。如果一個新文件夾/文件出現在監視節點下,我想開始觀看它,但是如果它出現在被忽略的節點下,我會忽略它。

難道我只是存儲每個「付諸行動」文件夾/文件,以及動作(手錶/忽略),用戶花了,然後每一次重建整個樹?有沒有更有效的方法來做到這一點,我不想描繪?

我很高興向大家澄清,如果我的電流I如何想象這種不清楚的解釋。另外,我正在使用.NET,但我對一般過程更感興趣 - 我將解決實現問題。

回答

1

你應該能夠與TreeView類來實現這一點。根據我的經驗,一旦選擇了一個節點,您需要添加一些邏輯來更新父節點和子節點,但是可以通過將處理程序附加到TreeView events之一來完成此操作。在過去構建的應用程序中,我相信我只使用了Click事件,但在重新思考之後,該「AfterSelect」可能是更好的選擇。但是,在實際的TreeNode類中可能會有更好的事件,但我還沒有研究這些。希望這篇文章能夠讓你開始朝正確的方向發展。

在一個側面說明,TreeView的類沒有標記爲可序列。但是,您可以序列化TreeView的根節點TreeNode。因此,您可以通過二進制序列化,XML序列化或您選擇的任何其他方法保存選定的選項。

+0

這就是我最終做的 - 樹視圖有一組對應於物理磁盤的頂級節點,並且該進程將每個節點序列化爲XML,然後將其保存到文件中。然後,我編寫了一個過程,接受樹視圖中的treenode(磁盤的圖片)和剛剛反序列化的treenode(上次的設置),並將複選框從保存的節點應用到樹視圖控件。感謝您指點我正確的方向! – SqlRyan 2010-06-23 21:54:45