Visual Basic问题获取列表框从文本文件填充

时间:2014-11-22 21:03:59

标签: arrays vb.net listbox

我陷入困境,并尝试多次重写代码,无法找到解决方案。该应用程序有一个文本文件,其中包含顺序访问文件中的项目和价格。当从列表框中选择项目时,应用程序应显示与项目对应的价格。文本文件中的每一行都包含项目的编号,后跟逗号,然后是价格。

我需要定义一个名为item的结构。该结构有2个成员变量,一个用于存储项目编号的字符串和一个存储价格的小数。我还需要声明一个包含5个项结构变量的类级数组。负载甚至应该读取项目和价格并将此信息存储在类级别数组中。然后它应该将项目编号添加到列表框中。

这是我到目前为止所做的,但没有任何工作。

Option Explicit On
Option Strict On
Option Infer Off

Public Class frmMain
    'declare structure with 2 member variables
    Structure Item
        Public strItemNum As String
        Public decPrice As Decimal
    End Structure

    'declare array for 5 item structure variables
    Private items(4) As Item

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub

    Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
        'declare variables
        Dim inFile As IO.StreamReader
        Dim strLineofText As String
        Dim intSub As Integer

        'check if the file exists
        If IO.File.Exists("ItemInfo.txt") Then
            'open the file
            inFile = IO.File.OpenText("ItemInfo.txt")
            'read the file
            Do Until inFile.Peek = -1 OrElse
                intSub = items.Length
                strLineofText = inFile.ReadLine.Trim
                'add item to list box
                lstNumbers.Items.Add(items(intSub).strItemNum)
            Loop
            'close the file
            inFile.Close()

        Else
        MessageBox.Show("Can't find the ItemInfo.txtfile",
                       "Kensington Industries",
                       MessageBoxButtons.OK,
                       MessageBoxIcon.Information)
        End If
    End Sub

    Private Sub lstNumbers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstNumbers.SelectedIndexChanged
        lblPrice.Text = items(lstNumbers.SelectedIndex).decPrice.ToString("C2")
    End Sub
End Class

2 个答案:

答案 0 :(得分:0)

我认为你需要更改Structure的名称。项目可以用于其他参考文献。

尝试将名称更改为itemstr(例如)

     Do Until inFile.Peek = -1 OrElse
        intSub = items.Length
        strLineofText = inFile.ReadLine.Trim
        'add item to list box
        Dim arr As String() = str.Split(","C)
        Dim valitem As New itemstr()
        valitem.text = arr(0)
        valitem.value = Convert.ToDecimal(arr(1))
        lstNumbers.Items.Add(valitem)
    Loop

答案 1 :(得分:0)

谢谢大家。我最终重新开始尝试不同的东西,最终有效!

选项明确开启 选项严格打开 选项推断关闭

公共类frmMain     '宣布结构     结构项目         Public strItemNum As String         公共decPrice为十进制     结束结构

'declare class level array
Public itemList(4) As Item

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    Me.Close()
End Sub

Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
    'declare variables
    Dim inFile As IO.StreamReader
    Dim strLineOfText As String
    Dim decPrice As Decimal
    Dim strInfo(4, 1) As String

    'check to see if the file exists
    If IO.File.Exists("ItemInfo.txt") Then
        'open the file
        inFile = IO.File.OpenText("ItemInfo.txt")

        For intRow As Integer = 0 To strInfo.GetUpperBound(0)
            'read the line
            strLineOfText = inFile.ReadLine

            'assign substring from comma to first coloumn
            strInfo(intRow, 0) = strLineOfText.Substring(0, strLineOfText.IndexOf(","))

            Dim intSep As Integer = strLineOfText.IndexOf(",") + 1

            'assign substring after comma to 2nd column
            strInfo(intRow, 1) = strLineOfText.Substring(intSep)

            'assign first column value to strItemNum variable
            itemList(intRow).strItemNum = (strInfo(intRow, 0))

            Decimal.TryParse(strInfo(intRow, 1), decPrice)

            'assign 2nd columnn value to decPrice variable
            itemList(intRow).decPrice = decPrice


            'add item to listbox
            lstNumbers.Items.Add(itemList(intRow).strItemNum)
        Next intRow

        'clost the file
        inFile.Close()

    Else
        'error message if file cannot be found
        MessageBox.Show("Can't find the ItemInfo.txtfile",
                       "Kensington Industries",
                       MessageBoxButtons.OK,
                       MessageBoxIcon.Information)

    End If
End Sub

Private Sub lstNumbers_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles lstNumbers.SelectedIndexChanged
    'display the price 
    lblPrice.Text = itemList(lstNumbers.SelectedIndex).decPrice.ToString("C2")
End Sub

结束班