C#如何在基于按钮单击的循环中从text/checbox序列化XML

C#如何在基于按钮单击的循环中从text/checbox序列化XML,c#,xml,serialization,checkbox,textbox,C#,Xml,Serialization,Checkbox,Textbox,我正在尝试基于按钮单击序列化用户控件中的值: 序列化与之类似 我有一个问题和几个问题 问题是,我不能在我的foreach进程中通过单击按钮来调用它(它超出了这个范围) 问题是: 我在检查时为每个复选框定义一个字符串;字符串中的名称应该与用于XML部分的公共字符串相关,这是一种合理的方法吗?e、 g public static string CheckBoxString; private void CheckBox1_CheckedChanged(object sender, Ev

我正在尝试基于按钮单击序列化用户控件中的值:

序列化与之类似

我有一个问题和几个问题

问题是,我不能在我的foreach进程中通过单击按钮来调用它(它超出了这个范围)

问题是:

我在检查时为每个复选框定义一个字符串;字符串中的名称应该与用于XML部分的公共字符串相关,这是一种合理的方法吗?e、 g

public static string CheckBoxString;
        private void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (CheckBox1.Checked)
            {
                CheckBoxString = "SESSIONNAMEValue";
            }
        }
下一个问题:

如果我有多个用户控件,所有这些控件都在不同阶段写入同一XML,例如,用户控件1为每个复选框写入sessionname,为每个复选框写入两个名称,为每个复选框写入三次时间

我应该如何最好地管理它?我不认为更新文件是最好的方法,但我不想将所有内容都写回表单,以便在最后存储和处理

XML示例:

<CONFIG1>
   <SESSIONNAME>SOMETHINGHERE</SESSIONNAME>
   <NAME>NAMEHERE</NAME>
   <DATETIME>DATE</DATETIME>
</CONFIG1>

<CONFIG2>
   <SESSIONNAME>SOMETHINGHERE</SESSIONNAME>
   <NAME>NAMEHERE</NAME>
   <DATETIME>DATE</DATETIME>
</CONFIG2>

这里有什么
名字在这里
日期
这里有什么
名字在这里
日期
使用源代码更新

源代码现在正在工作,我可以将我的复选框字符串编入表格并将其写入XML文件,但是如果我选中了两个复选框,第一个复选框将被覆盖,而不是最后一个复选框被附加到文件中

public class Config
            {
            public string SESSIONNAME { get; set; }
            public string NAME { get; set; }
            public int DATETIME { get; set; }


        }

        public class XMLSer
        {
            public List<Config> GetConfigList()
            {

                List<Config> configs = new List<Config>();
                configs.Add(new Config { SESSIONNAME = CheckBoxString, NAME = “TEST NAME”});            
                return configs;
            }
        }


        public static string CheckBoxString;
        private void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {

            if (CheckBox1.Checked)
            {
                ProductCheckBoxString = “CheckBox1”;
                MessageBox.Show(CheckBoxString);
            }


        }

        private void CheckBox2_CheckedChanged(object sender, EventArgs e)
        {

            if (CheckBox2.Checked)
            {
                ProductCheckBoxString = “CheckBox2”;
                MessageBox.Show(CheckBoxString);
            }


        }

        private void Next_Click(object sender, EventArgs e)
        {

        }

            private void ValidateButton_Click(object sender, EventArgs e)
        {

            Boolean checkboxFlag = false;
            foreach (var control in this.Controls)
            {
                if (control is CheckBox)
                {
                    if (((CheckBox)control).Checked)
                    {
                        foreach (var checkBox in this.Controls)
                        {
                            XMLSer xmlser = new XMLSer();
                            var cfglist = xmlser.GetConfigList();

                            XmlSerializer serializer = new XmlSerializer(typeof(List<Config>));
                            using (TextWriter writer = new StreamWriter(@"testout.xml"))
                            {
                                serializer.Serialize(writer, cfglist);
                            }
                        }
                        checkboxFlag = true;
                        ValidateButton.Hide();
                        NextButton.Show();

                    }
                }

            }
公共类配置
{
公共字符串SESSIONNAME{get;set;}
公共字符串名称{get;set;}
公共int日期时间{get;set;}
}
公共类XMLSer
{
公共列表GetConfigList()
{
列表配置=新列表();
Add(新配置{SESSIONNAME=CheckBoxString,NAME=“testname”});
返回配置;
}
}
公共静态字符串CheckBoxString;
私有无效复选框1\u CheckedChanged(对象发送方,事件参数e)
{
如果(复选框1.选中)
{
ProductCheckBoxString=“CheckBox1”;
Show(CheckBoxString);
}
}
私有无效复选框2\u CheckedChanged(对象发送方,事件参数e)
{
如果(复选框2.选中)
{
ProductCheckBoxString=“CheckBox2”;
Show(CheckBoxString);
}
}
私有无效下一次单击(对象发送者,事件参数e)
{
}
私有void ValidateButton_单击(对象发送方,事件参数e)
{
布尔checkboxFlag=false;
foreach(此.Controls中的var控件)
{
如果(控件为复选框)
{
如果(((复选框)控件).Checked)
{
foreach(此.Controls中的var复选框)
{
XMLSer=newxmlser();
var cfglist=xmlser.GetConfigList();
XmlSerializer serializer=新的XmlSerializer(typeof(List));
使用(TextWriter=newstreamWriter(@“testout.xml”))
{
serializer.Serialize(writer,cfglist);
}
}
checkboxFlag=true;
ValidateButton.Hide();
Show();
}
}
}
工作XML文件

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Config>
    <SESSIONNAME>CheckBox1</SESSIONNAME>
    <NAME>TEST NAME</NAME>
  </Config>
</ArrayOfConfig>

复选框1
测试名称
所以,现在我只有两个问题:

我希望将每组值逐个写入同一个文件的各自配置部分,在看到上述输出后,我更喜欢这种格式

<SESSIONNAME0>
   <NAME>NAMEHERE</NAME>
   <DATETIME>DATE</DATETIME>
</SESSIONNAME0>

<SESSIONNAME1>
   <NAME>NAMEHERE</NAME>
   <DATETIME>DATE</DATETIME>
</SESSIONNAME1>

名字在这里
日期
名字在这里
日期

如何将config类添加到sperate类文件中,以便与所有其他用户控件共享,而不必到处管理相同的代码

您可以发送其余代码吗?添加了更新。它现在也在工作,只需要最后一部分的帮助:)