Listbox 如何使用Streamreader将.txt文件中的不同文本行读取到不同的列表框中?
如果已经有人问过,请原谅我。我已经能够从一个.txt文件中找到大量关于写入列表框的信息,这非常简单。我似乎找不到太多的信息,就是将文本读回多个列表框,确切地说是10个。在过去的12个小时里我一直在做这个,我放弃了。我做什么都不管用。要么将所有列表框行放入第一个testListBox,要么当我尝试使用if…then语句时,不显示。我尝试了太多的东西,在这里列出。我的程序总共有10个列表框,但我只尝试了前两个。如果我能让它们正常运行,那么剩下的应该很容易。这就是为什么有10个列表框被编写,只有2个被读取的原因。这是我的写代码和读代码:Listbox 如何使用Streamreader将.txt文件中的不同文本行读取到不同的列表框中?,listbox,streamreader,streamwriter,Listbox,Streamreader,Streamwriter,如果已经有人问过,请原谅我。我已经能够从一个.txt文件中找到大量关于写入列表框的信息,这非常简单。我似乎找不到太多的信息,就是将文本读回多个列表框,确切地说是10个。在过去的12个小时里我一直在做这个,我放弃了。我做什么都不管用。要么将所有列表框行放入第一个testListBox,要么当我尝试使用if…then语句时,不显示。我尝试了太多的东西,在这里列出。我的程序总共有10个列表框,但我只尝试了前两个。如果我能让它们正常运行,那么剩下的应该很容易。这就是为什么有10个列表框被编写,只有2个被
' handles saveButton Click
Public Sub saveButton_Click(sender As Object, e As EventArgs) Handles saveButton.Click
SaveFileDialog1.InitialDirectory = "c:\users\jeremy\desktop"
SaveFileDialog1.FileName = (nameOfCourseTextBox.Text)
SaveFileDialog1.Filter = "Text File ONLY (*.txt)|*.txt"
SaveFileDialog1.ShowDialog()
Dim SW As New StreamWriter(SaveFileDialog1.FileName)
Dim i As Integer
SW.WriteLine(nameOfCourseTextBox.Text)
SW.WriteLine(creditsTextBox.Text)
SW.WriteLine(testTypeLabel.Text)
SW.WriteLine(testWeightLabel.Text)
SW.WriteLine(attendanceTypeLabel.Text)
SW.WriteLine(attendanceWeightLabel.Text)
SW.WriteLine(assignmentTypeLabel.Text)
SW.WriteLine(assignmentWeightLabel.Text)
SW.WriteLine(otherTypeLabel.Text)
SW.WriteLine(otherWeightLabel.Text)
SW.WriteLine(projectTypeLabel.Text)
SW.WriteLine(projectWeightLabel.Text)
SW.WriteLine(aTextBox.Text)
SW.WriteLine(bTextBox.Text)
SW.WriteLine(cTextBox.Text)
SW.WriteLine(dTextBox.Text)
SW.WriteLine(fTextBox.Text)
For i = 0 To testListBox.Items.Count - 1
SW.Write(testListBox.Items.Item(i) & ",")
Next
For i = 0 To gradeTestListBox.Items.Count - 1
SW.Write(gradeTestListBox.Items.Item(i) & ",")
Next
For i = 0 To assignmentListBox.Items.Count - 1
SW.WriteLine(assignmentListBox.Items.Item(i))
Next
For i = 0 To gradeAssignmentListBox.Items.Count - 1
SW.WriteLine(gradeAssignmentListBox.Items.Item(i))
Next
For i = 0 To attendanceListBox.Items.Count - 1
SW.WriteLine(attendanceListBox.Items.Item(i))
Next
For i = 0 To gradeAttendanceListBox.Items.Count - 1
SW.WriteLine(gradeAttendanceListBox.Items.Item(i))
Next
For i = 0 To projectListBox.Items.Count - 1
SW.WriteLine(projectListBox.Items.Item(i))
Next
For i = 0 To gradeProjectListBox.Items.Count - 1
SW.WriteLine(gradeProjectListBox.Items.Item(i))
Next
For i = 0 To otherListBox.Items.Count - 1
SW.WriteLine(otherListBox.Items.Item(i))
Next
For i = 0 To gradeOtherListBox.Items.Count - 1
SW.WriteLine(gradeOtherListBox.Items.Item(i))
Next
SW.Close()
End Sub ' saveButton_Click
Public Sub openFileButton_Click(sender As Object, e As EventArgs) Handles openFileButton.Click
OpenFileDialog1.InitialDirectory = "c:\users\jeremy\desktop"
OpenFileDialog1.Filter = "Text File ONLY (*txt)|*txt"
OpenFileDialog1.ShowDialog()
Dim SR As New StreamReader(OpenFileDialog1.FileName)
nameOfCourseTextBox.Text = SR.ReadLine
creditsTextBox.Text = SR.ReadLine
testTypeLabel.Text = SR.ReadLine
testWeightLabel.Text = SR.ReadLine
attendanceTypeLabel.Text = SR.ReadLine
attendanceWeightLabel.Text = SR.ReadLine
assignmentTypeLabel.Text = SR.ReadLine
assignmentWeightLabel.Text = SR.ReadLine
otherTypeLabel.Text = SR.ReadLine
otherWeightLabel.Text = SR.ReadLine
projectTypeLabel.Text = SR.ReadLine
projectWeightLabel.Text = SR.ReadLine
aTextBox.Text = SR.ReadLine
bTextBox.Text = SR.ReadLine
cTextBox.Text = SR.ReadLine
dTextBox.Text = SR.ReadLine
fTextBox.Text = SR.ReadLine
Do While (SR.Peek() > -1)
testListBox.Items.Add(SR.ReadLine)
Loop
Do While (SR.Peek() > -1)
gradeTestListBox.Items.Add(SR.ReadLine)
Loop
我只是在学习VisualBasic,这是我这门编程课的第一学期。我正在使用Visual Basic 2013。我意识到我有很多东西要学。我知道我仍然需要添加评论什么的,但我真的只是想在继续学习课程的其他方面之前,克服这个特殊的问题
例如,我曾尝试向testListBox.items添加前缀,但当我尝试在StreamReader部分使用任何类型的if…then语句来指定该行的位置时,列表框中没有显示任何内容。除此之外,我不知道如何在特定的列表框中写入特定的行。有人能帮我吗?我已经读了很多关于使用listview而不是listbox的内容,但是我已经花了很多时间来设置所有这些,如果有其他方法可以实现的话,我真的不想重复这么多。
编辑:所以,我去掉了逗号,现在唯一的事情是它把testListBox.items放在所有的列表框中。这是因为我不再进行循环,还是因为缺少您提到的string.join?如果我将循环添加回混合中,程序就会卡住。如何解释什么列表框中应该包含的内容?或者我应该把它扔掉,因为我=。。。那么,写部分的语句是什么
' handles saveButton Click
Public Sub saveButton_Click(sender As Object, e As EventArgs) Handles saveButton.Click
SaveFileDialog1.InitialDirectory = "c:\users\jeremy\desktop"
SaveFileDialog1.FileName = (nameOfCourseTextBox.Text)
SaveFileDialog1.Filter = "Text File ONLY (*.txt)|*.txt"
SaveFileDialog1.ShowDialog()
Dim SW As New StreamWriter(SaveFileDialog1.FileName)
Dim i As Integer
SW.WriteLine(nameOfCourseTextBox.Text)
SW.WriteLine(creditsTextBox.Text)
SW.WriteLine(testTypeLabel.Text)
SW.WriteLine(testWeightLabel.Text)
SW.WriteLine(attendanceTypeLabel.Text)
SW.WriteLine(attendanceWeightLabel.Text)
SW.WriteLine(assignmentTypeLabel.Text)
SW.WriteLine(assignmentWeightLabel.Text)
SW.WriteLine(otherTypeLabel.Text)
SW.WriteLine(otherWeightLabel.Text)
SW.WriteLine(projectTypeLabel.Text)
SW.WriteLine(projectWeightLabel.Text)
SW.WriteLine(aTextBox.Text)
SW.WriteLine(bTextBox.Text)
SW.WriteLine(cTextBox.Text)
SW.WriteLine(dTextBox.Text)
SW.WriteLine(fTextBox.Text)
For i = 0 To testListBox.Items.Count - 1
SW.Write(testListBox.Items.Item(i) & ",")
Next i
SW.WriteLine() ' creats new line
For i = 0 To gradeTestListBox.Items.Count - 1
SW.Write(gradeTestListBox.Items.Item(i) & ",")
Next i
SW.WriteLine() ' creats new line
For i = 0 To assignmentListBox.Items.Count - 1
SW.Write(assignmentListBox.Items.Item(i))
Next i
SW.WriteLine() ' creats new line
For i = 0 To gradeAssignmentListBox.Items.Count - 1
SW.Write(gradeAssignmentListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
For i = 0 To attendanceListBox.Items.Count - 1
SW.Write(attendanceListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
For i = 0 To gradeAttendanceListBox.Items.Count - 1
SW.Write(gradeAttendanceListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
For i = 0 To projectListBox.Items.Count - 1
SW.Write(projectListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
For i = 0 To gradeProjectListBox.Items.Count - 1
SW.Write(gradeProjectListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
For i = 0 To otherListBox.Items.Count - 1
SW.Write(otherListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
For i = 0 To gradeOtherListBox.Items.Count - 1
SW.Write(gradeOtherListBox.Items.Item(i))
Next
SW.WriteLine() ' creats new line
SW.Close()
End Sub ' saveButton_Click
Public Sub openFileButton_Click(sender As Object, e As EventArgs) Handles openFileButton.Click
OpenFileDialog1.InitialDirectory = "c:\users\jeremy\desktop"
OpenFileDialog1.Filter = "Text File ONLY (*txt)|*txt"
OpenFileDialog1.ShowDialog()
Dim SR As New StreamReader(OpenFileDialog1.FileName)
nameOfCourseTextBox.Text = SR.ReadLine
creditsTextBox.Text = SR.ReadLine
testTypeLabel.Text = SR.ReadLine
testWeightLabel.Text = SR.ReadLine
attendanceTypeLabel.Text = SR.ReadLine
attendanceWeightLabel.Text = SR.ReadLine
assignmentTypeLabel.Text = SR.ReadLine
assignmentWeightLabel.Text = SR.ReadLine
otherTypeLabel.Text = SR.ReadLine
otherWeightLabel.Text = SR.ReadLine
projectTypeLabel.Text = SR.ReadLine
projectWeightLabel.Text = SR.ReadLine
aTextBox.Text = SR.ReadLine
bTextBox.Text = SR.ReadLine
cTextBox.Text = SR.ReadLine
dTextBox.Text = SR.ReadLine
fTextBox.Text = SR.ReadLine
Dim S As String() = SR.ReadLine.Split(New Char() {","c})
testListBox.Items.AddRange(S)
gradeTestListBox.Items.AddRange(S)
assignmentListBox.Items.AddRange(S)
gradeAssignmentListBox.Items.AddRange(S)
SR.Close()
End Sub
虽然我会选择以明显不同的方式编写此代码,但您已经非常接近您所寻找的解决方案。当您用此代码写出列表框时
For i = 0 To testListBox.Items.Count - 1
SW.Write(testListBox.Items.Item(i) & ",")
Next
SW.WriteLine(); // <<-- Create a new line...
For i = 0 To gradeTestListBox.Items.Count - 1
SW.Write(gradeTestListBox.Items.Item(i) & ",")
Next
有关VB.NET和Split的示例,请参见本页。
编辑
唯一要做的就是为每个列表框添加readline调用,如下所示:
Dim S As String() = SR.ReadLine.Split(New Char() {","c})
testListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
gradeTestListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
assignmentListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
gradeAssignmentListBox.Items.AddRange(S)
好的,streamreader/writer不在我的类的范围之内。这个程序是一个项目,虽然我对它很满意,它满足了所有的要求,但如果我不能保存并打开它,那么它对我个人来说毫无价值。这就是为什么我一直在努力学习这些额外的东西。也就是说,我几乎没有掌握streamreader/writer的本质,因此String.split和String.join就在我的头顶上。你能给我举个例子吗?我一直在想办法,但就是无法同步。如果没有,我会继续努力解决。谢谢你的回复。我在答案中添加了更多的示例代码来解释每个建议。好的,我已经尝试合并你的建议,但它不起作用。我已经编辑了我原来的帖子,添加了我的新代码以及对不起作用的解释。希望我快到了。我做错什么了?是的,你很接近。代码按照您看到的顺序执行。因此,必须按照写入数据的顺序读取数据,这意味着执行读取和拆分的行太早了。因为您是在fTextbox之后写入testListBox项,所以必须在读取fTextbox的内容之后读取这些项。将以下行:Dim S As String=SR.ReadLine.SplitNew Char{,c}…向下移动到此行之前:testListBox.Items.AddRangeS。此外,您还需要为每个列表框添加相同类型的调用。此外,您不需要更改其他WriteLine调用。它们与最初一样好,如下所示:SW.WriteLinenameOfCourseTextBox.Text SW.writelineReceditStextBox.Text SW.WriteLinetestTypeLabel.Text SW.WriteLinetestWeightLabel.Text SW.WriteLineattendanceTypeLabel.Text SW.WriteLineattendanceWeightLabel.Text SW.writelineAsignmentTypeLabel.Text
Dim S As String() = SR.ReadLine.Split(New Char() {","c})
testListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
gradeTestListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
assignmentListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
gradeAssignmentListBox.Items.AddRange(S)