我接近让它工作,但目前无法在列表框中显示任何输出。我有它工作,但需要移动一些东西才能使连接功能起作用。
在我的程序中,用户将输入输入到文本框中,并根据键入的内容在列表框中显示数组。例如,如果他们键入“a”,则所有食物(在连接到的文本文件中)将显示以“a”开头的程序。
当有输出时,我需要找到一种方法来命名这个数组(根据用户输入的内容创建)并加入列表框中的所有项目(例如:食物堆叠在一起列表框将在底部显示为字符串)。
我发布了迄今为止的代码;我得到的所有错误(可能是我的逻辑错误)都在第一个公共类中,直到第一个if-next语句结束:
Public Class frmFoods
Dim foods() As String = IO.File.ReadAllLines("foods.txt")
Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
Dim Letter As String = txtLetter.Text.ToUpper
Dim smallerarray() As Array
Dim userarray As String
lstOutput.Items.Clear()
If IsNumeric(txtLetter.Text) = False Then
For Each food As String In foods
smallerarray = listfoods(Letter)
lstOutput.Items.Add(Letter)
userarray = Join(smallerarray, ", ")
lstOutput.Items.Add(userarray)
Next
ElseIf IsNumeric(txtLetter.Text) = True Then
MessageBox.Show("Please enter a letter.")
Else
MessageBox.Show("The text box is empty")
End If
End Sub
Function listfoods(ByVal letter As String) As String()
Dim foodarray(foods.Count - 1) As String
Dim counter As Integer = 0
For Each food As String In foods
If food.StartsWith(letter) Then
foodarray(counter) = food
counter += 1
End If
Next
ReDim Preserve foodarray(counter - 1)
Return foodarray
End Function
答案 0 :(得分:0)
你需要在dictionary或类似的地方保存listfoods函数的结果,如果你想'命名'它就把它与一个键关联起来,虽然不清楚为什么你需要这样做
至于列出以特定字母开头的食物,你只需要迭代你的函数listfoods的结果,并用逗号分隔每一个不是吗?
你现在拥有的东西会创建许多食物清单,因为你得到的食物清单以每种食物的特定字母开头。据我所知,这个问题你只需要做一次。
示例:
Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
Dim Letter As String = txtLetter.Text.ToUpper
Dim smallerarray() As Array
Dim userarray As String
lstOutput.Items.Clear()
If IsNumeric(txtLetter.Text) = False Then
'get all items from the file which begin with the letter the user chose
smallerarray = listfoods(Letter)
'add that letter to the output listbox
lstOutput.Items.Add(Letter)
'join all of the elements which begin with that letter
'into a single comma separated string
userarray = Join(smallerarray, ", ")
'add that string to the output
lstOutput.Items.Add(userarray)
ElseIf IsNumeric(txtLetter.Text) = True Then
MessageBox.Show("Please enter a letter.")
Else
MessageBox.Show("The text box is empty")
End If
End Sub
如果您可以看到实际值与逻辑预期的不同之处,那么您可能会逐步浏览代码并查看每个位置的变量值并将其与您期望看到的值进行比较。可以开始确定问题所在