2011-10-10 156 views
2

我使用openFileDialog从文本文件中读取并在列表框和saveFileDialog中打印值以保存textfile中的更改。我编写了此代码,但它不起作用。如果更改了与文本框的列表框工作正常。但我需要打印并将项目保存到listbox.any建议?打开并保存文件对话框

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

ListBox中没有一个有意义的执行Text属性。改用它的Items属性。 –

+0

如果我使用组合框? –

回答

3

您需要将文件的每一行添加为列表框项目。然后,保存,遍历每个列表框项目并将其写入一个新行。

您可以使用File.ReadAllLines和listBox1.Items.AddRange添加项目。

listBox1.Items.AddRange(File.ReadAllLines(openFileDialog1.FileName)); 

由于项目属性包含的对象,而不是字符串,您将需要手动遍历所有的项目,单独写出来......也许做这样的事情

StringBuilder sb = new StringBuilder(); 
foreach(object item in listBox1.Items) { 
    sb.AppendLine(item.ToString(); 
} 
File.WriteAllText(saveFileDialog1.FileName, sb.ToString()); 
+0

问题是项目包含字符串,而不是对象 –

+0

ListBox.Items是一个ObjectCollection,因此即使项目是字符串,它们也会作为对象返回,然后必须将其转换为字符串(或者,您可以使用ToString,它在一个字符串上返回自己)。你真的试过这段代码吗? –

+0

我试了一下,效果很好,谢谢! –

1

ListBox.Text仅代表选择部分列表框项目。

从MSDN文档引述:

当该属性的值被设置为一个字符串值,对于匹配指定的文本和选择项目列表框内的项目列表框的搜索。您还可以使用此属性来确定哪些项目在列表框中

当前选择的这应该工作:

using System.Linq; 
... 

string[] lines = File.ReadAllLines(fileName); 
listBox.Items.AddRange(lines.ToArray<object>());