唯一持久控制标识符

Maj*_*cRa 5 c# configuration uid winforms

我们有什么
我们有一些复杂的winforms控制.要存储其状态,我们使用一些自定义序列化类.让我们说我们已经将它序列化为xml.现在我们可以将这个xml保存为用户目录中的文件或将其包含在另一个文件中......
但是......

问题是,
如果用户在他的winform应用程序中创建了几个这样的控件(在设计时),最好使用哪个唯一标识符来了解哪些已保存的配置属于哪些控件?

所以这个标识符应该:

  • 在应用程序发布期间保持不变
  • 自动给定(或已经给定,就像我们可以假设Control.Name始终存在)
  • 独特的应用程序

我想可以想象一下这样做的几种方法,我相信可能会有一些默认的方法.

有什么好用的?为什么?

Maj*_*cRa 4

这个小扩展方法可以完成以下工作:

public static class FormGetUniqueNameExtention
{
    public static string GetFullName(this Control control)
    {
        if(control.Parent == null) return control.Name;
        return control.Parent.GetFullName() + "." + control.Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

它返回类似“Form1._flowLayoutPanel.label1”的内容

用法:

Control aaa;
Dictionary<string, ControlConfigs> configs;
...
configs[aaa.GetFullName()] = uniqueAaaConfig;
Run Code Online (Sandbox Code Playgroud)