首页 文章

如何将Windows窗体GUI中的字段值保存到文件中,然后还原它们?

提问于
浏览
1

我想将存储在文件中的内容加载到WinForms GUI的字段中 .

我的方法现在:我有一个编写器,它将每个文本框写入.txt文件中的一行 . 我有streamreader设置,但我不知道如何让它将每行加载到单独的文本框中 . 例如:Task1_name(第1行)和task1_desc(第2行)需要在单独的文本框中,我怎么能把它加载到框中?

谢谢

码:

保存按钮:

void Save_buttonClick(object sender, EventArgs e)
{
    DialogResult dialogResult = MessageBox.Show("Do you want to save?", "Save", MessageBoxButtons.YesNo);
    if (dialogResult == DialogResult.Yes)
    {
        FileStream file = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write);
        StreamWriter sw = new StreamWriter(file);
        sw.WriteLine(task1_name.Text);
        sw.WriteLine(task1_desc.Text);
        sw.WriteLine(task1_date.Value);
        sw.WriteLine(task1_check.Checked);
        sw.Close();
    }
}

加载按钮:

void Load_buttonClick(object sender, EventArgs e)
{
    DialogResult dialogResult = MessageBox.Show("Do you want to load?", "Load",     MessageBoxButtons.YesNo);
    if (dialogResult == DialogResult.Yes)
    {
        FileStream file = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write);
        StreamReader sr = new StreamReader(file);
        sr.Close();
    }           
}

3 回答

  • 0

    您可以将每行添加到List中并通过索引访问它们:

    //...
    List<string> lines = new List<string>();
    
    using (StreamReader sr = new StreamReader(file))
    {
        while(!sr.EndOfStream)
        {
            lines.Add(sr.ReadLine());
        }
    }
    
    task1_name.Text = lines[0];
    task1_desc.Text = lines[1];
    //...
    
  • 2

    使用XML序列化 . 它看起来像这样:

    public class MySettings 
    {
      public String name {get;set;}
      public String name {get;set;}
      public DateTime date {get;set;}
      public bool checked {get;set;}
    }
    
    void Save() 
    {
      var s = new MySettings 
      {
        name = this.task1_Name.Text,
        desc = this.task1_Desc.Text,
        date = this.task1_Date.Value,
        checked = this.task1_Check.Checked
      };
      var ser = new XmlSerializer(typeof(MySettings));
      using (var fs = new FileStream(path, FileMode.Create))
      {
          using (var tw = new StreamWriter(fs, new UTF8Encoding()))
          {
              var ns = new XmlSerializerNamespaces();
              ns.Add("", "");
              ser.Serialize(tw, this, ns);
          }
      }
    }
    

    加载它看起来像这样:

    static MySettings Load()
        {
            var ser = new XmlSerializer(typeof(MySettings));
            MySettings settings = null;
    
            try
            {
                using (var s = File.OpenRead(path))
                {
                    settings = (MySettings) ser.Deserialize(s);
                    // optionally validate here
                }
            }
            catch (Exception ex1)
            {
                MessageBox.Show("Cannot read settings. " + ex1.Message,
                                "error");
                settings = null;
            }
            return settings;
        }
    

    然后当然重置您的表单将是这样的:

    var settings = Load();
     this.task1_Name.Text = settings.name;
     this.task1_Desc.Text = settings.desc;
     this.task1_Date.Value = settings.date;
     this.task1_Check.Checked = settings.checked;
    
  • 0

    只需读取行并按照您编写的顺序填充表单:

    if (dialogResult == DialogResult.Yes)
    {
        FileStream file = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write);
        StreamReader sr = new StreamReader(file);
        task1_name.Text = sr.ReadLine();
        task1_desc.Text = sr.ReadLine();
        task1_date.Value = DateTime.Parse(sr.ReadLine());
        task1_checked.Checked = bool.Parse(sr.ReadLine());
        sr.Close();
    }
    

相关问题