2017-06-01 2 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 

私は前にそれ働いていたが、そのコードに配列(複数可)または構造を追加する使命を帯びていますなぜそれが存在するのですか?私は正常に構造体を追加し、テキストファイルにアクセスし、変数にロードしました。私の現在の問題は、変数の値を追加し、テキストファイルを更新することです。

+0

は、あなたがより正確だろうか?あなたは問題があると言いますが、エラーコードは何ですか? – Mederic

+0

BC30574とBC42104 –

+0

とは何ですか!範囲外のインデックスですか? – Mederic

答えて

0

どのようなタイプのlstWordsであるかわかりません。新しいエントリのためのテキストファイルの読み込み用として

Public lstWords As New List(Of Integer) 

、あなたが行っていないスペース: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

私のコードを変更しました。配列を使用する代わりに、構造体を追加してファイルからデータを正常にロードしましたが、データと変数の値を追加する際に問題が発生しています。コードは最初の投稿の上です –

関連する問題