Array dynamisch befüllen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mathysjp.

    Array dynamisch befüllen

    Salut zusammen
    Ich habe hier ein Problem das irgendwie meine vb.net Fähigkeiten übersteigt.
    Ich habe auf meiner Form 10 Textboxen wo ich per Drag Drop eine Textdatei reinziehe.
    Der Text in der jeweiligen Textbox ist dann der komplette Pfad und Dateiname dieser Datei.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Try
    3. 'datum und zeit für filename zusammenstellen
    4. Dim TT As String = DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss")
    5. 'definieren wo das file gespeichert wird
    6. Dim OutputPathMergePerfmeter As String = Application.StartupPath & "\logfile\" & "perfmeter_eval" & "_" & TT & "_.txt"
    7. 'label beschriften mit text wo das file gespeichert wird
    8. lblSaveMergePath.Text = OutputPathMergePerfmeter & vbCrLf & "hier wird die Datei gespeichert"
    9. Dim arrPath As String() = {txtMergePath01.Text, txtMergePath02.Text, txtMergePath03.Text, _
    10. txtMergePath04.Text, txtMergePath05.Text, txtMergePath06.Text, _
    11. txtMergePath07.Text, txtMergePath08.Text, txtMergePath09.Text, _
    12. txtMergePath10.Text}
    13. Dim i As Integer
    14. For i = 0 To arrPath.Length - 1
    15. text_combine(arrPath(i), OutputPathMergePerfmeter)
    16. Next
    17. Catch ex As Exception
    18. MessageBox.Show("Einige Dateipfade waren leer.")
    19. End Try
    20. End Sub


    Ich habe alle verfügbaren Pfade in ein Array gemacht. habe aber das Problem das das es durchaus mal vorkommen kann das nur in textbox 1 und 2 ein Pfad steht. In diesem Fall bekomme ich die vordefinierte Exeption.

    Wie kann ich das Array befüllen so das ich nur die textboxen drinn habe in denen auch was geschrieben steht?
    Oder kann man das in der FOR Schleife irgendwie machen das solche die "leer" sind ignoriert werden?
    LINQ it Baby, LINQ it!

    VB.NET-Quellcode

    1. Dim result As IEnumerable(Of String) = From tb As Control In Me.Controls Where tb.Name.StartsWith("txtMergePath") AndAlso DirectCast(tb, TextBox).Text.Length > 0 Select DirectCast(tb, TextBox).Text
    2. For Each s As String In result
    3. 'machwas()
    4. Next

    Ist nicht GANZ sauber, weil davon ausgegangen wird, dass alles was mit txtMergePath anfängt auch tatsächlich ne textbox ist, aber das dürfte wohl zutreffen ;)
    Danke für die Tipps. Ich habe mir folgende überlegung gemacht (siehe Code) und das funktioniert nun auch so wie ich das will.

    VB.NET-Quellcode

    1. If rbPerfmetrMerge.Checked = True Then
    2. Try
    3. 'datum und zeit für filename zusammenstellen
    4. Dim TT As String = DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss")
    5. 'definieren wo das file gespeichert wird
    6. Dim OutputPathMergePerfmeter As String = Application.StartupPath & "\logfile\" _
    7. & "perfmeter_eval" & "_" & TT & "_.txt"
    8. 'label beschriften mit text wo das file gespeichert wird
    9. lblSaveMergePath.Text = "Die datei wird hier gespeichert:" & vbCrLf & OutputPathMergePerfmeter
    10. 'array mit allem pfaden --> textboxen 1-10
    11. Dim arrPath As String() = {txtMergePath01.Text, txtMergePath02.Text, txtMergePath03.Text, _
    12. txtMergePath04.Text, txtMergePath05.Text, txtMergePath06.Text, _
    13. txtMergePath07.Text, txtMergePath08.Text, txtMergePath09.Text, _
    14. txtMergePath10.Text}
    15. Dim i As Integer
    16. For i = 0 To arrPath.Length - 1
    17. If arrPath(i) = Nothing Then
    18. 'MessageBox.Show("nothing" & i)
    19. Else
    20. 'MessageBox.Show(" not nothing" & i)
    21. text_combine(arrPath(i), OutputPathMergePerfmeter)
    22. End If
    23. Next
    24. Catch ex As Exception
    25. MessageBox.Show("Es ist ein Fehler aufgetreten." & vbCrLf & ex.ToString)
    26. End Try
    27. End If


    @ErfinderDesRades:
    Ich brauche die selben Textboxen noch für andere Sachen darum würde ich ungern alles andere umcoden so das es mit der Listbox auch geht. Werde mir aber deinen Vorschlag trotzdem mal anschauen.

    @picoflop:
    Mit dem Thema LINQ habe ich mich noch gar nicht beschäftigt. Werd es mal anschauen. Merci