0

ここでは単純な初心者の問題です。簡単に行ってください。ユーザーが値を入力して日付を選択できるいくつかのテキスト ボックスがあり、それらをリスト ボックスに表示したいと考えています。残念ながら、2 番目のテキスト ボックスの値だけが複数回表示されます。これはここで見ることができます: http://i.stack.imgur.com/kCqrz.png

完全な形式のコードは次のとおりです: http://pastebin.com/MDb1hSCA

データが配列に追加される場所は次のとおりです。

stockArray(nofDataDay, lowValue) = possibleLow
stockArray(nofDataDay, highValue) = possibleHigh
stockArray(nofDataDay, openValue) = possibleOpen
stockArray(nofDataDay, closeValue) = possibleClose
dateArray(nofDataDay) = Convert.ToDateTime(WeatherDateTimePicker.Text)
nofDataDay = nofDataDay + 1

そして、ここに表示されます:

For day = 0 To nofDataDay - 1
    StockListBox.Items.Add(dateArray(day).ToShortDateString & _
        delimiter & stockArray(day, openValue).ToString & _
        delimiter & stockArray(day, closeValue).ToString & _
        delimiter & stockArray(day, highValue).ToString & _
        delimiter & stockArray(day, lowValue).ToString & _
        delimiter & AverageStock(stockArray(day, lowValue), stockArray(day, highValue)))
Next

何らかの理由で、Close 値のみを追加しています。

4

1 に答える 1

0

列インデックス変数 (つまり、、、、) の値を設定することはopenValueありcloseValueませhighValuelowValue。それらはすべてデフォルトでゼロであるため、最初の列を複数回追加するだけです。次のように、宣言時にそれらの値を設定できます。

Dim lowValue As Integer = 0
Dim highValue As Integer = 1
Dim openValue As Integer = 2
Dim closeValue As Integer = 3

配列も大きく宣言する必要があります。

Dim stockArray(30, 3) As Integer

ただし、デフォルトでは、Dimフィールドは public として宣言されています。これはおそらく本当に望んでいるものではないため、private に変更することをお勧めします。また、列のインデックスは実際には定数である必要があります。

Private Const lowValue As Integer = 0
Private Const highValue As Integer = 1
Private Const openValue As Integer = 2
Private Const closeValue As Integer = 3
Private stockArray(30, 3) As Integer

ただし、この種のバグは、コードをより適切に設計することはできません。2 次元配列を使用するよりも、1 つのアイテムのすべてのデータを格納するクラスを作成することをお勧めします。次に、配列ではなく、List(T)オブジェクトを使用してアイテムのリストを格納します。例えば:

Public Class MyItem
    Public Date As Date
    Public LowValue As Integer
    Public HighValue As Integer
    Public OpenValue As Integer
    Public CloseValue As Integer
End Class

Private myItems As New List(Of MyItem)()

次に、次のようにアイテムを追加できます。

Dim item As New MyItem()
item.Date = Convert.ToDateTime(WeatherDateTimePicker.Text)
item.LowValue = possibleLow
item.HighValue = possibleHigh
' ...
myItems.Add(item)

次に、次のようにリストから項目を読み取ることができます。

For Each item As MyItem in myItems
    StockListBox.Items.Add(item.Date.ToShortDateString() & _
            delimiter & item.OpenValue.ToString() & _
            delimiter & item.CloseValue.ToString() & _
            delimiter & item.HighValue.ToString() & _
            delimiter & item.LowValue.ToString() & _
            delimiter & AverageStock(item.LowValue, item.HighValue))
Next

おわかりのように、このようにすると、より自己文書化され、混乱が少なくなり、バグが発生しにくくなります。

于 2012-12-21T20:36:23.167 に答える