表单关闭的txt未保存时

时间:2018-12-24 02:00:08

标签: c# winforms

我需要在文件中写入数据,并且ı在关闭表单后不想丢失数据。
我创建了一个成员身份,并且ı在文件中写了textbox1,2,3,然后在我关闭表单时丢失了所有数据。

try
{
    FileStream fs = new FileStream("Uye.txt", FileMode.Create);
    StreamWriter sw = new StreamWriter(fs);       
    sw.WriteLine(textBox1.Text + "," + textBox2.Text + "," + textBox3.Text);

    sw.Close();
    fs.Close();
    label4.Text = "Üyelik oluşturuldu";
    button2.Visible = true;

}
catch (Exception)
{
    label4.Text = "Üyelik oluşturulamadı";

}

2 个答案:

答案 0 :(得分:4)

几件事

  • 首先,请尽可能将方法包装在using中。
  • 第二,如果要保存关闭,则必须获得关闭通知,因此您可能想使用FormClosed事件
  • 最后,您只需File.WriteAllText即可简化操作,以确保释放文件句柄并将数据刷新到磁盘上

示例

public void SaveData()
{
   File.WriteAllText($"{textBox1.Text},{textBox2.Text},{textBox3.Text}");
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
   SaveData();
}

*注意:我添加了String Interpolation,因为在大多数情况下它更易于阅读,还添加了异常处理以提高品味*


只是为了简明using,这将是您所拥有的更好的模式

using (var fs = new FileStream("Uye.txt", FileMode.Create))
   using (var sw = new StreamWriter(fs))
   {
      sw.WriteLine($"{textBox1.Text},{textBox2.Text},{textBox3.Text}");
   }


// or
// note that disposing sw in the single using will dispose the file stream 
using (var sw = new StreamWriter(new FileStream("Uye.txt", FileMode.Create)))
{
   sw.WriteLine($"{textBox1.Text},{textBox2.Text},{textBox3.Text}");
}

更新

来自vasily.sib的有用评论

  

您也可以覆盖表单的OnFormClosed方法,而不是   订阅自己的事件

答案 1 :(得分:0)

您应该将文本框数据保存在事件form_closing

相关问题