Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NETTreeNode能知道它';她的父母变了?_C#_.net_Windows_Winforms - Fatal编程技术网

C# .NETTreeNode能知道它';她的父母变了?

C# .NETTreeNode能知道它';她的父母变了?,c#,.net,windows,winforms,C#,.net,Windows,Winforms,我有一个类扩展了.NET3.5(C#)中的TreeNode,LocationNode。此类是一个TreeNode,但包含一些额外的数据点,便于提取。显示这些LocationNode对象的树视图实现了拖放功能。每个LocationNode对象都有一个dirty标志,指示我关心的任何数据点是否已被用户更改。巧合的是,我关心的数据点之一是父节点 我可以在拖放代码中实现一些功能,以确定父节点是否已经足够容易地更改,但是为了抽象起见,我希望LocationNode对象跟踪它们自己的脏标志,并在必要时将其设

我有一个类扩展了.NET3.5(C#)中的
TreeNode
LocationNode
。此类是一个
TreeNode
,但包含一些额外的数据点,便于提取。显示这些
LocationNode
对象的树视图实现了拖放功能。每个
LocationNode
对象都有一个
dirty
标志,指示我关心的任何数据点是否已被用户更改。巧合的是,我关心的数据点之一是父节点

我可以在拖放代码中实现一些功能,以确定父节点是否已经足够容易地更改,但是为了抽象起见,我希望
LocationNode
对象跟踪它们自己的脏标志,并在必要时将其设置为true

有没有办法知道父节点是否已更改?我看不到任何可以从
LocationNode
钩住的事件会在集合中添加或删除时向我发出警报


想法?

将节点添加到树视图时,存储其父节点(或parent.fullpath),然后在执行脏计算时,将当前父节点与存储的父节点进行比较。然后,在SetClean()函数中,再次存储当前父对象。

通常,拖放操作仅提供和接收来自包含对象的通知。正如你所说的,这孩子不需要参加任何活动。(如果你把一个孩子拖到一个新的父母那里……他们会看错地方……是吗?)你看过事件聚合了吗?事件参数可以是ParentNode,ChildNode,父节点通知更改,然后子节点查看ChildNode是否为自身?不,您不能修改TreeNodeCollection类。在考虑了它之后,我认为这是最好的方法。如果NodeCollection类没有被密封,这样它就可以扩展到在节点添加和删除时触发事件,这将是一件好事,但在我看来,这是最干净的方式。