WPF节省输入和输出更新

时间:2016-01-01 15:51:14

标签: c# wpf

我已经掌握了将所有输入保存到文本文件的重点,但现在我想创建另一个功能,我可以更新该文件,但只能通过表单本身

after()

所以在这里它将所有输入和值作为字符串保存到blah.txt文件中,我现在如何从文件中检索所有信息并更新它?

2 个答案:

答案 0 :(得分:1)

您可以使用ReadAllText功能阅读文本文件的全部内容。此外,您可以压缩文本结构:

String ticketText = String.Format(@"
===================================[Receipt]====================================
|Title: {0}
|Surname: {1}
|Forname: {2} 
...
...

", comboBox.Text, textBox1.Text, textBox2.Text, ...);

saveText.Write(ticketText);

这种构建文本的方式更好,因为一切都是一次完成的,而且更容易阅读。使用interpolated strings时,这将更加轻松。

我还建议根据其含义命名控件:例如: txtTitle的{​​{1}}或TitleText

答案 1 :(得分:1)

在您的代码中,您使用两种不同的方法在一个进程中写入文件。您使用StreamWriter保存收据。然后静态File.AppendAllText附加一个空行。没必要那样做。我认为最好在单独的方法中生成消息,然后使用静态File.AppendAllText一次性保存所有内容:

private string GetReceipt()
{
    StringBuilder receiptBuilder = new StringBuilder();
    receiptBuilder.AppendLine("===================================[Receipt]===================================");
    receiptBuilder.AppendLine("|Title:" + " " + comboBox.Text);
    receiptBuilder.AppendLine("|Surname:" + " " + textBox1.Text);
    receiptBuilder.AppendLine("|Forname:" + " " + textBox2.Text);
    receiptBuilder.AppendLine("|Passanger[s]:" + " " + textBox6.Text);
    receiptBuilder.AppendLine("|Group:" + " " + checkBox.IsChecked + "  " + "No: " + textBox4.Text);
    receiptBuilder.AppendLine("|Class:" + " " + comboBox1.Text);
    receiptBuilder.AppendLine("|Luggage:" + " " + textBox7.Text);
    receiptBuilder.AppendLine("|Suitcase:" + " " + checkBox1.IsChecked + "  " + "No: " + textBox5.Text);
    receiptBuilder.AppendLine("|Departure On:" + "  " + DatePicker.Text + " " + "At:" + "  " + comboBox2.Text);
    receiptBuilder.AppendLine("|Destination From:" + " " + lb + " " + "To:" + " " + lb1);
    receiptBuilder.AppendLine("===================================[Receipt]===================================");

    receiptBuilder.AppendLine();

    return receiptBuilder.ToString();
}

然后保存到文件:

File.AppendAllText(filePath, GetReceipt());

通过这种小型重构,您现在可以轻松实现请求的第一部分:更新现有文件。

当您需要使用新数据更新文件时,您只需调用GetReceipt()并附加结果。

或者,如果您需要删除旧文件,则可以使用WriteAllText代替:

File.WriteAllText(filePath, GetReceipt());

现在读取文件。取决于你的需要。如果您只是阅读文本并将其显示在文本框中,那么它相当容易。只需使用ReadAllText

即可
myTextBox.Text = File.ReadAllText(filePath);

但是,如果要在适当的组合框和文本框中显示它,则必须手动读取该文件。但如果情况确实如此,那么我建议您稍微重构一下代码:

创建一个包含收据所有信息的类。每次要保存数据时,都要创建此类的新实例,然后将其序列化(或保存到数据库),以便检索特定字段。如果您仍希望有一种很好的方式来显示收据,则可以覆盖ToString方法。