我有一个程序正在监视文件夹列表中某些文件的更改,包括子项(如果监视文件夹,它将监视所有子项)。我想添加从这个过程中排除某些孩子的能力,但我不确定如何最好地处理它或存储“规则”。例如,这是一棵我可能会看到的树:
Root
Folder1
SubFolder1
File1
File2
Folder2
File3
File4
我想允许用户选择一个文件夹(如“Root”),它会自动选择所有孩子。如果他们取消选中一个文件夹(比如Folder1),我想取消选中该文件夹的所有子项,但如果他们检查孩子的子项(如File1),我想检查其所有子项(或者,在这种情况下,只看File1,因为它没有孩子。)
我认为我会将这些数据存储为用户采取某种操作(+或 - )的节点列表,然后一次一个级别地走下文件夹列表,直到我得到到用户采取不同操作的节点,然后继续进入文件夹/文件,检查每一步,看看用户是否特别对该节点采取了某些操作,然后将其传播到所有子节点-nodes。如果一个新文件夹/文件出现在一个观察节点下,我想开始观看它,但如果它出现在一个被忽略的节点下,我会忽略它。
我是否只存储每个“actioned”文件夹/文件,以及用户所采取的操作(监视/忽略),然后每次重建整个树?有没有更有效的方法来做到这一点,我没有想象?
我很高兴澄清我目前对我如何描述这种不清楚的解释。另外,我正在使用.NET,但我对一般过程更感兴趣 - 我将完成实现。
答案 0 :(得分:1)
您应该可以使用TreeView课程来完成此任务。根据我的经验,在选择节点后,您需要在其中添加一些逻辑来更新父节点和子节点,但这可以通过将处理程序附加到TreeView events之一来实现。在我过去构建的应用程序中,我相信我只使用了Click事件,但在重新思考之后,“AfterSelect”可能是更好的选择。但是,在实际的TreeNode类中可能有更好的事件可用,但我还没有研究这些事件。希望这篇文章至少可以让你开始朝着正确的方向前进。
另外,TreeView类未标记为可序列化。但是,您可以序列化TreeView的根TreeNode。因此,您可以通过二进制序列化,XML序列化或您选择的任何其他方法保存所选选项。