c#将整个UI控件值保存为XML

本文关键字:保存 XML 控件 UI | 更新日期: 2023-09-27 18:12:23

我在c#应用程序中有很多控件值。我想知道是否有可能一次存储和读取整个可用的控件值,而不是下面的代码。

请注意,下面的代码仅适用于1个groupBox。我有8个,因此这将生成很多代码来实现它(8倍于下面的代码)。

  • groupBox是彼此的副本
  • 下面的代码可以工作
  • 我使用序列化configData类(works)来存储数据。

    private void uiStateWriteToData()
    {
        configData.datSensor4mA1 = (int)uiSensor4mA1.Value;
        configData.datSensor20mA1 = (int)uiSensor20mA1.Value;
        configData.datSensorPidP1 = (int)uiSensorPidP1.Value;
        configData.datSensorPidI1 = (int)uiSensorPidI1.Value;
        configData.datSensorPidD1 = (int)uiSensorPidD1.Value;
        configData.datSensorPidS1 = (int)uiSensorPidS1.Value;
        configData.datSensor1InToOutput1 = uiSensor1Out1.Enabled;
        configData.datSensor1InToOutput2 = uiSensor1Out2.Enabled;
        configData.datSensor1InToOutput3 = uiSensor1Out3.Enabled;
    }
    
    private void uiStateUpdateFromData()
    {
        uiSensor4mA1.Value = configData.datSensor4mA1;
        uiSensor20mA1.Value = configData.datSensor20mA1;
        uiSensorPidP1.Value = configData.datSensorPidP1;
        uiSensorPidI1.Value = configData.datSensorPidI1;
        uiSensorPidD1.Value = configData.datSensorPidD1;
        uiSensorPidS1.Value = configData.datSensorPidS1;
        uiSensor1Out1.Enabled = configData.datSensor1InToOutput1;
        uiSensor1Out2.Enabled = configData.datSensor1InToOutput2;
        uiSensor1Out3.Enabled = configData.datSensor1InToOutput3;
    }
    

c#将整个UI控件值保存为XML

我不知道是否有任何框架可以做到这一点,但也许你可以提出自己的实用程序,根据控件层次结构,类型和名称将控件值写入xml文件。

下面是它的样子(而不是伪代码):

private static void WriteControlValuesToXml(XmlDocument document, XmlNode parentNode, Control currentControl)
{
    // if current control is container, writing its children values
    if (currentControl.Controls.Count > 0)
    {
        var addedNode = AddNode(parentNode, currentControl.Name);
        foreach (Control childControl in currentControl.Controls)
            WriteControlValuesToXml(document, addedNode, childControl);
    }
    else
    {
        // if current control is not container, writing control values
        if (currentControl is CheckBox)
        {
            var checkBox = (CheckBox)control;
            AddNode(parentNode, currentControl.Name, "CheckBox", checkBox.Checked);
        }
        if (currentControl is TextBox)
        {
            var textBox = (TextBox)control;
            AddNode(parentNode, currentControl.Name, "TextBox", textBox.Text);
        }
        // ... other known controls
    }
}

按照相同的逻辑,您可以实现从文件中读取相同的控制值。