2010-06-21 51 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