我使用openFileDialog从文本文件中读取并打印列表框中的值和saveFileDialog以保存textfile.i中的更改。编写此代码但它不起作用。如果使用文本框更改列表框工作很好。但我需要打印并将项目保存到列表框中。有什么建议吗?
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
}
private void button4_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
label7.Text = openFileDialog1.FileName;
listBox1.Text = File.ReadAllText(label7.Text);
}
}
private void button5_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
File.WriteAllText(saveFileDialog1.FileName, listBox1.Text);
}
}
答案 0 :(得分:3)
您需要将文件的每一行添加为列表框项。然后,为了保存,循环遍历每个列表框项并将其写为新行。
您可以使用File.ReadAllLines和listBox1.Items.AddRange添加项目。
listBox1.Items.AddRange(File.ReadAllLines(openFileDialog1.FileName));
由于Items属性包含对象而不是字符串,因此您需要手动循环遍历这些项并单独编写它们......或许可以执行类似
的操作StringBuilder sb = new StringBuilder();
foreach(object item in listBox1.Items) {
sb.AppendLine(item.ToString();
}
File.WriteAllText(saveFileDialog1.FileName, sb.ToString());
答案 1 :(得分:1)
ListBox.Text仅表示列表框项的选定部分。
来自MSDN文档的引用:
当此属性的值设置为字符串值时,ListBox将在ListBox中搜索与指定文本匹配的项目并选择该项目。您还可以使用此属性来确定ListBox中当前选择的项目
这应该有效:
using System.Linq;
...
string[] lines = File.ReadAllLines(fileName);
listBox.Items.AddRange(lines.ToArray<object>());