probier mal statt x + 1 nur x in der Schleife zu nehmen. Sieht so aus als würde das Array Playlist() ein paar Strings mir Wert Nothing enthalten. (Kann es sein, dass das Array größer dimensioniert ist, als es Werte enthält?
Dabei kannst Du Dir das ToString() sparen, wenn das Array ein String Array ist.
Ist aber nur eine Vermutung.
Grüße
Morrighan.
> For x = 0 To PlayList.Count - 1
> lstFiles.Items.Add(PlayList(x + 1).ToString)
lstFiles.Items.Add(PlayList(x))
> Next
Ein Array Playlist() vom Typ String möchte ich an eine Listbox
zuweisen.
Mein bisheriger Code:
For x = 0 To PlayList.Count - 1
lstFiles.Items.Add(PlayList(x + 1).ToString)
Next
In dem Array befinden sich nur Pfadangaben als String, keine
weiteren Dimensionen.
Warum so umstaendlich?
lstFiles.Items.AddRange(PlayList)
Ich bekomm aber immer den Hinweis:
Der Wert darf nicht NULL sein. Parametername: item
??? Was hab ich da falsch gemacht, und gibts evtl eine
elegantere Lösung dafür?
Das liegt daran, das mind. 1 Wert in deinem Array den Wert Null belegt hat
Am besten ist es wenn du dir mal anschaust wo das Array gefuellt wird und dort den „Fehler“ suchst.
Aber solltest du auf Krampf den Fehler nicht finden, so schafft folgendes Abhilfe.
'So wird die Liste gefuellt
lstFiles.Items.AddRange(CheckArray(PlayList))
'Diese Function mit in die Form kopieren. Diese werden benötigt
Private Function CheckArray(ByVal vret() As String) As String()
Dim vData() As String
ReDim vData(vret.GetUpperBound(0))
For i As Integer = vret.GetLowerBound(0) To vret.GetUpperBound(0)
If vret(i) Is Nothing Then
vData(i) = ""
Else
vData(i) = vret(i)
End If
Next i
Return vData
End Function
Wenn du in deiner Playlist ein Feld mit Nothing belegt hast, so wird in der Liste stattdessen ein Leerzeile eingefuegt.
Wert Nothing enthalten. (Kann es sein, dass das Array größer
dimensioniert ist, als es Werte enthält?
Wenn x im letzten Schleifendurchlauf gleich PlayList.Count - 1 ist, dann wird ja auf jeden Fall mit PlayList(x + 1)hinters Array gegriffen, oder? Ich hab’ allerdings keine Ahnung von Basic.NET, aber so anders als C# wird es ja nicht sein.
Besser wärs allerdings (meiner Meinung nach) das Array richtig
zu dimensionieren und ohne Nothing-Werte zu befüllen.
Richtig. Aber sinnvoll ist es dann nicht in dies in der Hilfsfunktion zu gestalten, sondern dort wo es gefuellt wird und den Teil hat er leider nicht gepostet. Aber diese Aenderung ist leicht gemacht und wenn man alles fertig serviert, wo bleibt da der Lern Effekt? *zwinker*
Hi!
Nur der Vollständigkeit halber:
Arrays in .NET (egal ob VB.NET oder C# oder F# oder sonst eine .NET Sprache) haben immer bei 0 beginnende Indizes, das ist schon richtig. Aber wenn Du „hinters“ Array greifst, bekommst Du nicht Nothing/Null sondern eine IndexOutOfRangeException.
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Besser wärs allerdings (meiner Meinung nach) das Array richtig
zu dimensionieren und ohne Nothing-Werte zu befüllen.
Wenn nicht klar ist wie groß das Array werden soll und auch leere Werte verhindert werden sollen, dann würde ich zur List-Klasse aus System.Collections.Generic greifen.
Funktionieren würde das etwa so:
Private playlist As New System.Collections.Generic.List(Of String)
Public Sub PlaylistFüllen()
Dim stDateiname As String
Do '...z.B. einen Ordner im Dateisystem durchlaufen
stDateiname = ...
If stDateiname "" Then
playlist.Add(stDateiname)
End If
Loop
End Sub
Public Sub PlaylistAnzeigen()
Listbox.Items.AddRange(playlist)
End Sub
Dann hat man die bequeme Möglichkeit auch wieder Elemente aus der Liste zu löschen playlist.Items.Remove(„xyz“) bzw. playlist.Items.RemoveAt(5)
Nur der Vollständigkeit halber:
Arrays in .NET (egal ob VB.NET oder C# oder F# oder sonst eine
.NET Sprache) haben immer bei 0 beginnende Indizes, das ist
schon richtig. Aber wenn Du „hinters“ Array greifst, bekommst
Du nicht Nothing/Null sondern eine IndexOutOfRangeException.
Eben. Deswegen tippe ich auch darauf, dass das Array nicht richtig (sondern zu groß) dimensioniert ist.
Gruß
Morrighan.