2017-06-01 58 views
-1

這裏是我的代碼:問題追加新的數據的文本文件,並更新變量值

Imports System.IO 

Public Class HomeUtilityAudProgram 
Private Structure HomeUtility 
    Public kwCostDec As Decimal 
    Public dailyHoursInt As Integer 
    Public KwPowerInt As Integer 
    Public waterGalCostDec As Decimal 
    Public waterGalUsedInt As Integer 
    Public decOperatingCost As Decimal 
End Structure 

Private objHomeUtility As HomeUtility 

Public Property lstWords As Object 

Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click 

End Sub 

Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles TV.Click 
    'Display TV 
    lblMessage.Text = "TV" 
End Sub 

Private Sub decCostPerKw_TextChanged(sender As Object, e As EventArgs) Handles decCostPerKw.TextChanged 

End Sub 

Private Sub intPowerPerKw_TextChanged(sender As Object, e As EventArgs) Handles intPowerPerKw.TextChanged 

End Sub 

Private Sub intHoursPerDay_TextChanged(sender As Object, e As EventArgs) Handles intHoursPerDay.TextChanged 

End Sub 

Private Sub DecBtnlCalcCost_Click(sender As Object, e As EventArgs) Handles DecBtnCalcCost.Click 
    Try 
     'Array and variable declarations 

     objHomeUtility.kwCostDec = Decimal.Parse(decCostPerKw.Text, Globalization.NumberStyles.Currency) 
     objHomeUtility.dailyHoursInt = Integer.Parse(intHoursPerDay.Text, Globalization.NumberStyles.Number) 
     objHomeUtility.waterGalCostDec = Decimal.Parse(decCostPerGal.Text, Globalization.NumberStyles.Currency) 
     objHomeUtility.waterGalUsedInt = Integer.Parse(intNumGalUsed.Text, Globalization.NumberStyles.Number) 

     Dim sr As New StreamReader("applianceWatt.txt") 
     objHomeUtility.KwPowerInt = CInt(Val("")) '<< Add Val() to handle non-number strings 
     Dim KwsPowerInt(-1) As Integer '<< add -1 inside brackets to initialise the array 
     Dim i As Integer = 0 

     Do Until sr.Peek = -1 
      'grab one value at a time from text file 
      objHomeUtility.KwPowerInt = CInt(Val(sr.ReadLine())) '<< Add Val() to handle non-number strings 
      i += 1 '<< increment your counter 
     Loop 
     sr.Dispose() '<< close the file 

     If objHomeUtility.KwPowerInt <= 6000 And objHomeUtility.KwPowerInt >= 10 Then 

      objHomeUtility.decOperatingCost = objHomeUtility.kwCostDec * objHomeUtility.KwPowerInt * objHomeUtility.dailyHoursInt + objHomeUtility.waterGalCostDec * objHomeUtility.waterGalUsedInt 
      lblMessage.Text &= " using " + objHomeUtility.KwPowerInt.ToString("G") + "Kw of power " + " for " + objHomeUtility.kwCostDec.ToString("C") + " an hour for " + objHomeUtility.dailyHoursInt.ToString("G") + " hours and " + objHomeUtility.waterGalCostDec.ToString("C") + " per gallon of water for " + objHomeUtility.waterGalUsedInt.ToString("G") + " gallons is " + objHomeUtility.decOperatingCost.ToString("C") 

     Else 
      lblMessage.Text = "Invalid wattage entered." 

     End If 

     Dim Result = MsgBox("Do you want to change the default wattage value?", MsgBoxStyle.YesNo, "Append Wattage") 

     If Result = MsgBoxResult.Yes Then 
      intPowerPerKw.Visible = True 

      objHomeUtility.KwPowerInt = File.CreateText.StreamReader("applianceWatt.txt") 

      If objHomeUtility.KwPowerInt <= 6000 And objHomeUtility.KwPowerInt >= 10 Then 

       objHomeUtility.decOperatingCost = objHomeUtility.kwCostDec * objHomeUtility.KwPowerInt * objHomeUtility.dailyHoursInt + objHomeUtility.waterGalCostDec * objHomeUtility.waterGalUsedInt 
       lblMessage.Text &= " using " + objHomeUtility.KwPowerInt.ToString("G") + "Kw of power " + " for " + objHomeUtility.kwCostDec.ToString("C") + " an hour for " + objHomeUtility.dailyHoursInt.ToString("G") + " hours and " + objHomeUtility.waterGalCostDec.ToString("C") + " per gallon of water for " + objHomeUtility.waterGalUsedInt.ToString("G") + " gallons is " + objHomeUtility.decOperatingCost.ToString("C") 

      Else 
       lblMessage.Text = "Invalid wattage entered." 

      End If 
     End If 

    Catch ex As Exception 
     MessageBox.Show("Error in quantity on hand or product cost", "Data Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Sub 

Private Sub Fridge_Click(sender As Object, e As EventArgs) Handles Fridge.Click 
    'Display Refrigerator 
    lblMessage.Text = "Refrigerator" 
End Sub 

Private Sub Heater_Click(sender As Object, e As EventArgs) Handles Heater.Click 
    'Display Heater 
    lblMessage.Text = "Heater" 
End Sub 

Private Sub Fan_Click(sender As Object, e As EventArgs) Handles Fan.Click 
    'Display Fan 
    lblMessage.Text = "Fan" 
End Sub 

Private Sub Dryer_Click(sender As Object, e As EventArgs) Handles Dryer.Click 
    'Display Dryer 
    lblMessage.Text = "Dryer" 
End Sub 

Private Sub Oven_Click(sender As Object, e As EventArgs) Handles Oven.Click 
    'Display Oven 
    lblMessage.Text = "Oven" 
End Sub 

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click 
    decCostPerKw.Clear() 
    intPowerPerKw.Clear() 
    intHoursPerDay.Clear() 
    decCostPerGal.Clear() 
    intNumGalUsed.Clear() 
    lblMessage.Text = String.Empty 
End Sub 

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click 
    ' Close the form. 
    Me.Close() 
End Sub 

Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles Washer.Click 
    'Display Washer 
    lblMessage.Text = "Washer" 
End Sub 

Private Sub Label5_Click(sender As Object, e As EventArgs) Handles Label5.Click 

End Sub 

Private Sub Label6_Click(sender As Object, e As EventArgs) Handles Label6.Click 

End Sub 

Private Sub intNumGalUsed_TextChanged(sender As Object, e As EventArgs) Handles intNumGalUsed.TextChanged 

End Sub 
End Class 

我之前的工作,但我的任務到一個數組(S)或結構添加到代碼這就是它存在的原因。我已經成功添加了一個結構並訪問了文本文件並將其加載到變量中。我目前的問題是追加變量的值並更新文本文件。

+0

你能更準確?你說你得到一個問題,但錯誤代碼是什麼? – Mederic

+0

BC30574和BC42104 –

+0

它說什麼!索引超出範圍? – Mederic

回答

0

不知道什麼類型的lstWords應該是。嘗試List(Of Integer)

Public lstWords As New List(Of Integer) 

至於你的文本文件閱讀,你沒有將空間新條目:

Dim sr As New StreamReader("applianceWatt.txt") 
Dim KwPowerInt As Integer = CInt(Val("")) '<< Add Val() to handle non-number strings 
Dim KwsPowerInt(-1) As Integer '<< add -1 inside brackets to initialise the array 
Dim i As Integer = 0 

Do Until sr.Peek = -1 
    'grab one value at a time from text file 
    KwPowerInt = CInt(Val(sr.ReadLine())) '<< Add Val() to handle non-number strings 

    'Place value into array 
    ReDim Preserve KwsPowerInt(i) '<< Add Redim Preserve to make space for the new result 
    KwsPowerInt(i) = KwPowerInt 

    'Output 
    lstWords.Add(KwsPowerInt(i)) '<< add to List(Of Integer) 
    i += 1 '<< increment your counter 
Loop 
sr.Dispose() '<< close the file 
+0

我替換了lstWords的List(Of Integer),它引發錯誤30469引用非共享成員需要一個對象引用 –

+0

我已經改變了我的代碼,而不是使用我添加的數組添加了一個結構,併成功從文件中加載數據,但遇到了追加數據和變量值的問題。代碼在初始文章中位於上方 –