Array an Listbox zuweisen

Hallöchen,

Ich arbeite mit VisualBasic aus VisStudio2008

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. 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?

Danke!

Hallo,

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

Hallo,

Ich arbeite mit VisualBasic aus VisStudio2008

OK

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 :frowning:
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.

MfG Alex

Hallo nochmal,

Wenn du in deiner Playlist ein Feld mit Nothing belegt hast,
so wird in der Liste stattdessen ein Leerzeile eingefuegt.

Besser wärs allerdings (meiner Meinung nach) das Array richtig zu dimensionieren und ohne Nothing-Werte zu befüllen.

Morrighan.

Hallo!

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.

Jan

Hallo,

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*

MfG Alex

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]

Moin…

Danke für den Tip Anno, hat funktioniert!!!
mfg micha

Hallo!

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)

mfg
christoph

Ebenfalls 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.

Eben. Deswegen tippe ich auch darauf, dass das Array nicht richtig (sondern zu groß) dimensioniert ist.
Gruß
Morrighan.