Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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# 检查Treeview是否有更改?_C#_Winforms_.net 3.5_Treeview - Fatal编程技术网

C# 检查Treeview是否有更改?

C# 检查Treeview是否有更改?,c#,winforms,.net-3.5,treeview,C#,Winforms,.net 3.5,Treeview,我有一个winform,它显示了一个Treeview控件,每当winform打开时,就会填充一大堆节点。我的代码允许用户选择一个节点,然后打开一个小对话框,输入一个值,然后编辑节点的文本 当用户关闭表单时,是否可以检查整个树视图的更改? 我在考虑将所有节点汇总成一个字符串,然后在关闭表单时,将其作为新字符串再次汇总,并将其与以前生成的字符串进行比较,但我认为有更好的方法可以做到这一点。尽管如果提前缓存节点,您可以查看树视图查看所有更改,我认为正确的方法是在变化发生时进行管理。例如,当打开表单编辑

我有一个winform,它显示了一个Treeview控件,每当winform打开时,就会填充一大堆节点。我的代码允许用户选择一个节点,然后打开一个小对话框,输入一个值,然后编辑节点的文本

当用户关闭表单时,是否可以检查整个树视图的更改?


我在考虑将所有节点汇总成一个字符串,然后在关闭表单时,将其作为新字符串再次汇总,并将其与以前生成的字符串进行比较,但我认为有更好的方法可以做到这一点。

尽管如果提前缓存节点,您可以查看
树视图查看所有更改,我认为正确的方法是在变化发生时进行管理。例如,当打开表单编辑来自的表单中的节点时,如下所示:

private Form1 _f;

...

public Form2(Form1 f)
{
    this._f = f;
}
protected override void OnClosing(CancelEventArgs e)
{
    this._f.SetChangedNode(...);
}
然后
覆盖
表单2的
onclose
方法,如下所示:

private Form1 _f;

...

public Form2(Form1 f)
{
    this._f = f;
}
protected override void OnClosing(CancelEventArgs e)
{
    this._f.SetChangedNode(...);
}

并在
Form1
上创建
SetChangedNode
方法。我不知道这些参数是什么样的,但它们可能类似于
TreeNode节点、string newLabel
,然后您可以轻松地将这些值存储在
字典中,然后在关闭应用程序时利用该
字典。
。简短回答:是的,这是可能的

如果您坚持等待保存或注册更改,直到应用程序关闭,您可以编写一个简单的递归函数,用旧版本(从保存它的地方加载)遍历当前版本(带有可能更改的工作内存)。我将把实施交给你。总之,这里有一些启示:


P>个人认为在保存编辑表单时,通过按下OK或保存来保存用户所做的任何更改。

< P>这是一个非常常见的谬误,TreVIEW(如ListBox和ListView)没有通知节点集合改变的事件。这有一个很好的理由,用户自己不能做任何事情来添加或删除节点。只有您的代码才能做到这一点。你不可能不知道。或者换句话说,你不需要被告知你已经知道的事情


如果你想要一个事件,那么你可以添加你自己的。并在代码更改节点集合时激发它。请注意,这是一种代码气味,您几乎总是希望在模型上收到这种通知,而不是视图。

您不需要收到关于您已经知道的内容的通知。
-喜欢这种说法!