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();
    }           
}
4

3 に答える 3

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;
于 2012-05-10T22:38:54.440 に答える
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();
}
于 2012-05-10T22:42:11.553 に答える
0

すべての行をリストに追加し、インデックスでアクセスできます。

//...
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];
//...
于 2012-05-10T22:38:46.223 に答える