Items.Add

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Frage:

    Windoof Vista schrieb:

    Das sind aber mehrere Dateien
    Antwort:

    squisheemixxa schrieb:

    weil du pro item einen string übegeben musst

    quasi for each datei in path

    listview.items.add(datei)

    next
    ... :rolleyes:

    LG


    PS: Andere Möglichkeit: Du bekommst ja ein Array mit GetFiles, die Funktion Add() kann aber nur einen einzelnen String aufnehmen. Nutze die Funktion AddRange() ! (Diese nimmt ein Array an)
    Ich sag dazu ja nur, dass du die Grundlagen lernen solltest, wenn du die einzelnen Datentypen nicht unterschieden kannst.
    Wie gesagt, verwende AddRange.
    hi windoof vista
    das geht bestimmt auch 'smarter' aber ich würds so machen:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. start:
    3. Try
    4. Dim file As String
    5. Dim count As Integer
    6. file = My.Computer.FileSystem.GetFiles("E:\Lokalradio\Verpackungen\Unterleger\").Item(count)
    7. count = count + 1
    8. ListBox1.Items.Add(file)
    9. GoTo start
    10. Catch ex As Exception
    11. MsgBox("Die Suche ist beendet!", MsgBoxStyle.Information, "100%")
    12. End Try
    13. End Sub


    LG
    bitte rede ihm nicht auch noch so einen schrecklichen uralt-käsecode ein! wenn schon c&p posten, dann ordentlichen, sodass sich die leute nicht auch noch solche unarten angewöhnen!

    zur schadensbegrenzung:

    VB.NET-Quellcode

    1. For Each item As String In Directory.GetFiles("E:\Lokalradio\Verpackungen\Unterleger\")
    2. ListView1.Items.Add(item)
    3. Next


    oder noch eleganter:

    VB.NET-Quellcode

    1. ListView1.Items.AddRange(Directory.GetFiles("E:\Lokalradio\Verpackungen\Unterleger\"))
    GoTos sind böse, MsgBox ist veraltet und My sollte man ja schonmal gar nicht verwenden.
    Außerdem ist es eigenartig, einen Try-Catch-Block zu verwenden, um anzugeben, dass ein Vorgang erfolgreich durchgeführt wurde.
    Ja, aber das Forum ist gewissermaßen eine Lehrveranstaltung.
    In der es neben "es irgendwie ans laufen bringen" ganz wesentlich um Programmierstil geht.
    Also wer Code in schlechtem Stil empfiehlt ist gewissermaßen ein Anfängerverderber.
    Schon schneller als mittelfristig ist mit schlechten Stilproben einem Anfänger eher geschadet als genützt.

    squisheemixxa schrieb:

    VB.NET-Quellcode

    1. ListView1.Items.AddRange(Directory.GetFiles("E:\Lokalradio\Verpackungen\Unterleger\"))
    nur fürs verständniss, da ich mich mit listviews auch grad rumschlag, habe ich das mal so versucht aber :



    VB.NET-Quellcode

    1. For Each item As String In Directory.GetFiles("E:\Lokalradio\Verpackungen\Unterleger\")
    2. ListView1.Items.Add(item)
    3. Next


    hingegen geht
    Ich mach dies immer so:



    VB.NET-Quellcode

    1. Dim list As List(Of String) = Nothing
    2. Private Sub add_file_to_listbox()
    3. ListBox1.Items.Clear()
    4. list = GetFileList("E:\Sticksim\", True) '(Pfad als string, true/false ob unterordner einbezogen werden sollen)
    5. ListBox1.Items.AddRange(list.ToArray)
    6. End Sub
    7. Public Shared Function GetFileList(ByVal Root As String, Optional ByVal SubFolders As Boolean = True) As List(Of String)
    8. Dim FileList As New List(Of String)
    9. SeekFiles(Root, FileList, SubFolders)
    10. Return FileList
    11. End Function
    12. Private Shared Sub SeekFiles(ByVal Root As String, ByRef FileArray As List(Of String), ByVal SubFolders As Boolean)
    13. Try
    14. Dim Files() As String = System.IO.Directory.GetFiles(Root)
    15. Dim Folders() As String = System.IO.Directory.GetDirectories(Root)
    16. For i As Integer = 0 To UBound(Files)
    17. FileArray.Add(Files(i).ToString)
    18. Next
    19. If SubFolders = True Then
    20. For i As Integer = 0 To UBound(Folders)
    21. SeekFiles(Folders(i), FileArray, SubFolders)
    22. Next
    23. End If
    24. Catch Ex As Exception
    25. End Try
    26. End Sub
    paar Verbesserungen:

    VB.NET-Quellcode

    1. Private Sub add_file_to_listbox(ByVal lb As ListBox)
    2. Dim list As New List(Of String)
    3. SeekFiles("E:\Sticksim\", list, True)
    4. lb.DataSource = list
    5. End Sub
    6. Private Shared Sub SeekFiles(ByVal Root As String, ByVal fileCollector As List(Of String), _
    7. ByVal SubFolders As Boolean)
    8. Try
    9. fileCollector.AddRange(System.IO.Directory.GetFiles(Root))
    10. If Not SubFolders Then Return
    11. For Each child In System.IO.Directory.GetDirectories(Root)
    12. SeekFiles(child, fileCollector, SubFolders)
    13. Next
    14. Catch Ex As UnauthorizedAccessException
    15. 'nur UnauthorizedAccessException ignorieren - alle anderen müssen fliegen dürfen
    16. End Try
    17. End Sub

    Insbesondere ein uneingeschränkter TryCatch implementiert gewissermaßen die Strategie, Gefahren dadurch zu begegnen, dass man ganz fest die Augen davor verschließt ;)
    gugge doch selbst nach, im ObjectBrowser.

    Aber ich denke, der Aufklärungsbedarf besteht beim TryCatch.
    Weil ein Catch Ex As Exception fängt jede Exception und setzt also die gesamte Fehlerverfolgung ausser Kraft - wie gesagt: das ist wie sich die Augen zuhalten, wenn die Klingonen angreifen.
    Schlicht NoGo.
    gugge auch AvoidTryCatch
    es sei noch gesagt das exception wenn es als letztes genutzt wird alle fehler die nicht behandelt einsammelt.

    VB.NET-Quellcode

    1. Try
    2. 'mache die normale arbeit
    3. Catch ex As AccessViolationException
    4. MsgBox("AccessViolationException", MsgBoxStyle.Critical, "~ ahhhh") ' die anderen ex genauso z.b.
    5. Catch ex As AggregateException
    6. Catch ex As AppDomainUnloadedException
    7. Catch ex As ArgumentException
    8. Catch ex As DivideByZeroException
    9. Catch ex As FormatException
    10. Catch ex As InvalidCastException
    11. Catch ex As IO.DirectoryNotFoundException
    12. Catch ex As IO.FileNotFoundException
    13. Catch ex As MemberAccessException
    14. ' hier kann man viele reinschreiben *G ( http://msdn.microsoft.com/de-de/library/system.exception.aspx ganz unten )
    15. Catch ex As Exception ' schnappt sich alle fehler die bisher nicht gecatched wurden
    16. MsgBox("ich bin nur zu sehen wenn es keine andere möglichkeit gibt", MsgBoxStyle.Critical, "~ ahhhh")
    17. End Try


    hier nochmal der link aus dem code
    msdn.microsoft.com/de-de/library/system.exception.aspx
    ---
    dann gibt es noch was feines : Finally

    [VB.NET] wofür is finally?

    ---
    was ich ( vielleicht wegen der uhrzeit 8| nicht verstehe ist der unterschied zwischen finally und dem schreiben nach dem endtry

    VB.NET-Quellcode

    1. Try
    2. Catch ex As Exception
    3. Finally
    4. MsgBox("ich bin zu sehen ob fehler oder nich *G", MsgBoxStyle.Information, "~ moo")
    5. End Try


    vs

    VB.NET-Quellcode

    1. Try
    2. Catch ex As Exception
    3. Finally
    4. End Try
    5. MsgBox("ich bin zu sehen ob fehler oder nich *G", MsgBoxStyle.Information, "~ moo")
    auch du gugge AvoidTryCatch.

    Catch Ex As Exception ist NoGo.
    Eine beliebige Exception kann nicht behandelt werden, und deshalb darf man sie nicht fangen. Denn sie zu fangen führt dazu, dass das Prog weiterläuft, eindeutig in einem undefinierten Zustand.

    Auch eine Messagebox im Catch-Abschnitt ist NoGo. Das ist keine Fehlerbehandlung. Eine Messagebox kriegst du auch, wenn du den TryCatch weglässt, und zwar eine viel bessere, als du programmieren kannst. Fürs Debuggen isses ja einfach dumm, sich die FehlerVerfolgung der IDE selbst wegzucatchen.

    Eine Fehlerbehandlung muß genau das Problem lösen, welches aufgetreten ist, ansonsten darf das Prog nicht weiter laufen.
    Daher ist Fehlerbehandlung etwas äußerst individuelles, und nur auf höchster Ebene überhaupt umsetzbar, denn mal erfordert die Fehlerbehebung eine Interaktion mit dem User, mal müssen mehr oder weniger umfangreiche Programm-Segmente deaktiviert werden, und mal haste vlt. tatsächlich einen Cache programmiert, wode die Daten hinspeicherst, und per Automat wird das dann später an den Server geschickt, wenn die Verbindung wieder möglich ist.

    Aber solange du diesen fabelhaft intelligenten Cache nicht hast - darfst du kein TryCatch hinschreiben.