Vb.net 使用StringBuilder将列表框的内容附加到文本文件

Vb.net 使用StringBuilder将列表框的内容附加到文本文件,vb.net,Vb.net,我试图在VisualStudio中创建一个程序,在该程序中,只要按下一个按钮,列表框的内容就会添加到文本文件中 我目前正在使用StringBuilder来实现这一点,因为我的教授告诉我这是最简单、最快捷的方法-我知道我也可以使用StreamWriter Dim CreateReciept As New System.Text.StringBuilder CreateReciet.Append(lstOrderForm.Text & vbCrLf) System.IO.File.Wri

我试图在VisualStudio中创建一个程序,在该程序中,只要按下一个按钮,
列表框的内容就会添加到文本文件中

我目前正在使用
StringBuilder
来实现这一点,因为我的教授告诉我这是最简单、最快捷的方法-我知道我也可以使用
StreamWriter

Dim CreateReciept As New System.Text.StringBuilder

CreateReciet.Append(lstOrderForm.Text & vbCrLf)

System.IO.File.WriteAllText("order_receipt.txt", Text.ToString())

Process.Start("order_receipt.txt")

这是我现在的代码;但是,当我运行它时,它会生成一个空白表单,而不是列表框的内容

请尝试以下方法:

Dim CreateReciet As New System.Text.StringBuilder

CreateReciet.Append(lstOrderForm.Text & vbCrLf)

System.IO.File.WriteAllText("order_receipt.txt", CreateReciet.ToString())

Process.Start("order_receipt.txt")
正如我上面所说,您的stringbuilder没有做任何有用的事情,因此您可以编写:

System.IO.File.WriteAllText("order_receipt.txt", lstOrderForm.Text & vbCrLf)
Process.Start("order_receipt.txt")

你看错了东西。将仅提供当前选定项目的文本:

当此属性的值设置为字符串值时,列表框将在列表框中搜索与指定文本匹配的项并选择该项。您还可以使用此属性确定列表框中当前选定的项目。如果列表框的SelectionMode属性设置为SelectionMode.MultiExtended,则此属性返回第一个选定项的文本。如果列表框的SelectionMode属性未设置为SelectionMode.None,则此属性返回第一个选定项的文本

而是在集合中循环:

此属性使您能够获取对列表框中当前存储的项目列表的引用。通过此引用,您可以添加项、删除项以及获取集合中的项计数。有关可以使用项集合执行的任务的详细信息,请参阅ListBox.ObjectCollection类参考主题

最后,不要使用
Text.ToString
,那样不行。而是使用您的
StringBuilder

Dim sb As New StringBuilder

For Each item In lstOrderForm.Items
    sb.Append(item.ToString() & vbCrLf)
Next

System.IO.File.WriteAllText("order_receipt.txt", sb.ToString())

Process.Start("order_receipt.txt")
代码为我生成以下输出:


首先,您输出的是变量(或控件)文本的内容,而不是字符串生成器(第3行的第二个参数)。除非其中包含某些内容,否则结果将是一个空白文件。此外,stringbuilder用于以有效的方式构建包含多个部分的字符串(简单地附加到字符串中,效率很低,因为每次这样做都是在创建新的字符串对象)。在上面的代码中,您只添加了一个项目,因此它没有做任何有用的事情-最好只使用字符串或内联值谢谢Kevin,为什么我会得到一个空白文件?我将切换到使用StreamWriter,但为什么我会得到一个空白文本文件?第三行中的文本是什么?这肯定不是你的stringbuilder。用CreateReciet.ToString()替换它,看看是否有更好的结果。我不经常使用本机列表框,所以我不确定Text属性是否符合您的要求。如果此时仍然没有得到预期的结果,则可能需要循环列表框中的项目并追加每个项目。如果您这样做,那么您的stringbuilder会让您感觉到您刚刚检查了ListBox文档和ListBox。文本肯定不会执行您希望它执行的操作-“获取或搜索ListBox中当前选定项的文本。”。它最多只返回一个项目的文本。因此,您需要遍历这些项。查看Jinx88909的答案了解详细信息。毫无疑问,这就是你的教授建议使用列表框的原因!谢谢Kevin,我自己刚刚提供了文档的链接,没有意识到您对
ListBox.Text
发表了评论。有趣的是,我从来没有使用过
ListBox.Text
属性,而是倾向于
ListBox.SelectedItem
。如果没有绝对路径,文件将在应用程序当前目录中创建,如果没有其他更改,则可能是EXE所在的目录。这仍然适用于用户试图实现的目标,因为他所做的只是在自己的过程中启动它来查看它。不过对我来说有点不整洁sure@KevinO多诺万:谢谢你,你说得对。该问题可能与未在项目中循环以及未正确使用
StringBuilder
有关。