2017-07-15 9 views
0

2つのテキストボックスのテキストをループを使用して配列に追加しようとしていますが、コードはすべての配列位置を1つの位置だけでなくデータで埋めます。VB.NETで配列全体を満たすループを停止するにはどうすればよいですか?

私の現在のコード:

If collfoldername.Text = "" Or collfolderref.Text = "" Then 
     MsgBox("Please fill all fields!", MsgBoxStyle.Critical, "Error") 
    Else 
     For i As Integer = 0 To 20 
      FolderName(i) = collfoldername.Text 
      FolderReference(i) = collfoldername.Text 
     Next 

    collfoldername.Text = "" 
     collfolderref.Text = "" 
     collfoldername.Focus() 
    End If 

任意のアドバイスはありますか?

+0

ループしています。 1つのアイテムのみを更新する場合は、ループしないでください。コレクションに何かを追加する場合は、配列の代わりにリストを使用してください。 – LarsTech

+0

なぜcollfoldername.Textを21回挿入する必要がありますか? – jonathana

+0

ここでは2つのオプションがあります。まず、@LarsTechの推奨に従い、代わりに 'List(Of T)'を使用し、何か追加する必要があるたびに.Addを使用するのが最も簡単です。配列を操作する必要がある場合は、静的変数を使用して、使用する必要がある次のインデックスを覚えて、そこから値を割り当て、各追加操作の後にインデックスをインクリメントします。 – Fabulous

答えて

0

あなたのループはあなたの入力から配列内のすべての要素を割り当てています。

アレイで次に使用可能なスロットだけを設定したい場合は、ループを使用しないでください。

Public Index As Integer 
Public FolderName(20) As String 
Public FolderReference(20) As String 
Sub SetArrayValues() 
    If Not Index<FolderName.Length Then 
     MsgBox("Array Is Full", MsgBoxStyle.Critical, "Error") 
    Else If collfoldername.Text = "" Or collfolderref.Text = "" Then 
     MsgBox("Please fill all fields!", MsgBoxStyle.Critical, "Error") 
    Else 
     FolderName(Index) = collfoldername.Text 
     FolderReference(Index) = collfoldername.Text 
     collfoldername.Text = "" 
     collfolderref.Text = "" 
     Index +=1 
     collfoldername.Focus() 
    End If 
End Sub 
Public Sub Button1_Click(Sender As Object, E As EventArgs) Handles Button1.Click 
    SetArrayValues() 
End Sub 

あなたは、配列のサイズを変更する必要があるでしょう、あなたの配列のサイズよりも、すべてのより多くのアイテムにしたい場合は、次の代わりに、配列内の自分の位置を追跡し、メソッド呼び出しごとに変数1時間をインクリメントする変数を使用する必要があります:

Public Index As Integer 
Public FolderName(20) As String 
Public FolderReference(20) As String 
Sub SetArrayValues() 
    If Not Index<FolderName.Length Then 
     ReDim Preserve FolderName(Index) 
     ReDim Preserve FolderNameReference(Index)  
    End If 
    If collfoldername.Text = "" Or collfolderref.Text = "" Then 
     MsgBox("Please fill all fields!", MsgBoxStyle.Critical, "Error") 
    Else 
     FolderName(Index) = collfoldername.Text 
     FolderReference(Index) = collfoldername.Text 
     collfoldername.Text = "" 
     collfolderref.Text = "" 
     Index +=1 
     collfoldername.Focus() 
    End If 
End Sub 
Public Sub Button1_Click(Sender As Object, E As EventArgs) Handles Button1.Click 
    SetArrayValues() 
End Sub 

もう1つの方法は、Generic.List(Of T)を使用して必要に応じて値を追加することです。この方法を使用すると、配列内の位置を追跡する必要はありません。

Public FolderName As New Generic.List(Of String) 
Public FolderReference As New Generic.List(Of String) 
Sub AddValues() 

    If collfoldername.Text = "" Or collfolderref.Text = "" Then 
     MsgBox("Please fill all fields!", MsgBoxStyle.Critical, "Error") 
    Else 
     FolderName.Add(collfoldername.Text) 
     FolderReference.Add(collfoldername.Text) 
     collfoldername.Text = "" 
     collfolderref.Text = "" 
     collfoldername.Focus() 
    End If 
End Sub 
Public Sub Button1_Click(Sender As Object, E As EventArgs) Handles Button1.Click 
    AddValues() 
End Sub 
+0

ありがとうございました! – S4mJDawes

関連する問題