c# - 将控件属性(例如 :TextBox. 文本)序列化/保存到自定义配置文件

标签 c# controls serializable serialization

我正在开发一个小程序,我想将一些控件状态和属性保存到配置文件中。但是,由于多种原因,我不想使用“传统”设置文件,而是将其序列化或简单地保存到特定文件中。

例如,获取 window1 的 TextBox1.Text 并将其序列化,以便在我启动应用程序时可以重新使用旧值。例如,某些复选框也是如此。

如何做到这一点?这不是一个“功课”项目,因为我在业余时间从头开始学习 C#。我已经寻找了几种方法,但是它们太复杂了,要么使用专门用于该目的的自定义序列化类,要么使用 Visual Studio 中的标准 .settings 文件进行设置。另外,我在 C# 中工作,程序使用 WPF 而不是 MFC。

最佳答案

我们之前通过遍历可视化树并将每个项目保存到 XML 文件来解决这个问题。 XML 布局将反射(reflect)可视化树。重新加载树后,您可以遍历 XML 文件以加载默认值。

    private void ForEachControlRecursive(object root, Action<Control> action, bool IsRead)
    {
        Control control = root as Control;
        //if (control != null)
        //    action(control);

        // Process control
        ProcessControl(control, IsRead);

        // Check child controls
        if (root is DependencyObject && CanWeCheckChildControls(control))
            foreach (object child in LogicalTreeHelper.GetChildren((DependencyObject)root))
                ForEachControlRecursive(child, action, IsRead);
    }

ProcessControl 基本上每个控件类型都有一个开关,路由到给定控件的自定义函数。

例如:

    private void ProcessControl(TextBox textbox, bool IsRead)
    {
        //1. textbox.Name; - Control name
        //2. Text                 - Control property
        //3. textbox.Text  - Control value
        if (IsRead)
        {
                                    // Class that reads the XML file saving the state of the visual elements
            textbox.Text = LogicStatePreserver.GetValue(textbox).ToString();
        }
        else
        {
            LogicStatePreserver.UpdateControlValue(textbox, textbox.Text);
        }
    }

关于c# - 将控件属性(例如 :TextBox. 文本)序列化/保存到自定义配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300570/

相关文章:

forms - Excel VBA 中的现代表单和表单控件

wpf - 如何将WPF选项卡项标题扩展到父控件宽度

java - 为什么在 JDK 类中使用完全限定名称声明可序列化?

java - ObjectInputStream 不读取多次

delphi - 控件 ''没有父窗口: Why is control not named?

java - 实现 java.io.Serialized 的两种类型的 Arraylist

c# - 与 Dropbox 一样,上传后在左下角的文件或文件夹图标上标记正确的符号

c# - 如何在 LINQ 中选择查询时存储变量?

c# - 使用UWP以AMR-NB编码捕获音频?

c# - C# 中全局替换 javascript 代码