繁体   English   中英

如何在XML文件中编写/读取多行文本?

[英]How to write / read multi-line text in an XML file?

我正在尝试将一些应用程序设置保存到XML文件。 为此,我在单个Props.cs文件中使用以下代码:

using System;
//надо добавить для работы класса
using System.Xml.Serialization;
using System.IO;


namespace SettingWinForm
{
    //Класс определяющий какие настройки есть в программе
    public class PropsFields
    {
        public String XMLFileName = Environment.CurrentDirectory + "\\settings.xml";
        //Чтобы добавить настройку в программу просто добавьте туда строку вида -
        //public ТИП ИМЯ_ПЕРЕМЕННОЙ = значение_переменной_по_умолчанию;
        public String TextValue = @"File Settings";
        public DateTime DateValue = new DateTime(2011, 1, 1);
        public Decimal DecimalValue = 555;
        public Boolean BoolValue = true;
    }
    //Класс работы с настройками
    public class Props
    {
        public PropsFields Fields;

        public Props()
        {
            Fields = new PropsFields();
        }
        //Запись настроек в файл
        public void WriteXml()
        {
            XmlSerializer ser = new XmlSerializer(typeof(PropsFields));

            TextWriter writer = new StreamWriter(Fields.XMLFileName);
            ser.Serialize(writer, Fields);
            writer.Close();
        }

        //Чтение настроек из файла
        public void ReadXml()
        {
            if (File.Exists(Fields.XMLFileName))
            {
                XmlSerializer ser = new XmlSerializer(typeof(PropsFields));
                TextReader reader = new StreamReader(Fields.XMLFileName);
                Fields = ser.Deserialize(reader) as PropsFields;

                reader.Close();
            }
            else
            {
                //можно написать вывод сообщения если файла не существует
            }
        }
    }
}

我还在Form1.cs文件中有一个Form ,该文件包含textBox1comboBox1checkBox1和两个Button

using System;
using System.Windows.Forms;

namespace SettingWinForm
{
    public partial class Form1 : Form
    {
        #region Settings action
        Props props = new Props(); //экземпляр класса с настройками 
        //Запись настроек
        private void writeSetting()
        {
           props.Fields.TextValue = textBox1.Text;
           props.Fields.TextValue = comboBox1.Text;
           props.Fields.BoolValue = checkBox1.Checked;     
           props.WriteXml();
        }

        private void readSetting()
        {
            props.ReadXml();

            textBox1.Text = props.Fields.TextValue;
            comboBox1.Text = props.Fields.TextValue;
            checkBox1.Checked = props.Fields.BoolValue;
        }
        #endregion

        #region Form Action
        public Form1()
        {
            InitializeComponent();
        }           
        #endregion

        private void button1_Click_1(object sender, EventArgs e)
        {
            writeSetting(); 
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            readSetting();
        }

        // Очистить 
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            comboBox1.Text = "";
            checkBox1.Checked = false;
        }
    }
}

在此处输入图片说明

如何从textBox1读取多行文本并将其写入XML文件?

无论是单行还是多行,您所拥有的内容都可以很好地保存和读取来自textBox1的文本。 您显示的代码中的问题是,您要同时保存textBox1文本和comboBox1文本,然后再将其保存到同一字段TextValue 您正在用第二个值覆盖第一个值。

您需要为comboBox文本创建一个新的文本字段(即TextValue2 )。 或者,如果不可编辑,则将comboBox索引值存储到DecimalValue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM