C# 检查Treeview是否有更改?
我有一个winform,它显示了一个Treeview控件,每当winform打开时,就会填充一大堆节点。我的代码允许用户选择一个节点,然后打开一个小对话框,输入一个值,然后编辑节点的文本 当用户关闭表单时,是否可以检查整个树视图的更改?C# 检查Treeview是否有更改?,c#,winforms,.net-3.5,treeview,C#,Winforms,.net 3.5,Treeview,我有一个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)没有通知节点集合改变的事件。这有一个很好的理由,用户自己不能做任何事情来添加或删除节点。只有您的代码才能做到这一点。你不可能不知道。或者换句话说,你不需要被告知你已经知道的事情
如果你想要一个事件,那么你可以添加你自己的。并在代码更改节点集合时激发它。请注意,这是一种代码气味,您几乎总是希望在模型上收到这种通知,而不是视图。您不需要收到关于您已经知道的内容的通知。
-喜欢这种说法!