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; }
我不知道是否有任何框架可以做到这一点,但也许你可以提出自己的实用程序,根据控件层次结构,类型和名称将控件值写入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
}
}
按照相同的逻辑,您可以实现从文件中读取相同的控制值。