PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Basic 2008 ListBox Items ausgeben.


Geldmann3
2011-05-24, 22:03:51
Hallo, ich würde gerne alle Items aus einer Listbox in einer MessageBox ausgeben. In einem früheren Projekt habe ich eine einfache Möglichkeit verwendet, die nur mit 1-3 Codezeilen funktionierte. Sonst müsste ich ja aufwendig die Anzahl der Items ermitteln und jedes einzeln ausgeben lassen. Ich erinnere mich, dass es so fast so einfach ging wie die Ausgabe einer TextBox. Was mich selbst mal verwunderte. Aber wie geht das nochmal?

Ich meine mich zu entsinnen, dass ich mit einem kurzem Stück Code alle ListBox Einträge in eine .txt Datei speichern konnte. Diese wurden automatisch untereinander gespeichert. Beim Laden wurden sie wieder in die Listbox eingefügt...

Oder spinne ich jetzt? Hatte ich vielleicht vorher eine Klasse importiert?

Monger
2011-05-24, 22:56:30
Erstmal: wir reden von der Windows Forms ListBox, richtig? Die WPF ListBox funktioniert n bissl anders.

Gucken wir uns doch erstmal gemeinsam die Klasse an. Ahja... ListBox.Items gibt eine ObjectCollection zurück.

http://msdn.microsoft.com/de-de/library/system.windows.forms.listbox.items.aspx

Blöderweise keine generische Collection von Strings, sonst wären wir jetzt fast fertig.

Wo wollen wir hin? Irgendwo da hin:
IO.File.WriteAllLines(string, string[])

Eine Lösung sieht so aus (in c#, .NET 3.5):

List<String> lines = new List<String>();
foreach(object item in listBox1.Items){
lines.Add(item.ToString());
}
IO.File.WriteAllLines(@"D:\MyFile.txt", lines.ToArray());

Und andersrum:

string[] lines = IO.File.ReadAllLines(@"D:\MyFile.txt");
foreach(string line in lines){
listBox1.Items.Add(line);
}

PatkIllA
2011-05-24, 23:10:00
Geht doch noch kürzer
System.IO.File.WriteAllLines(@"file.txt", listBox1.Items.OfType<string>());
Bei 3.5 muss noch ein ToArray() hinten dran.

listBox1.Items.AddRange(System.IO.File.ReadAllLines(@"file.txt"));

Geldmann3
2011-05-24, 23:26:52
Danke :biggrin:

Hmmm, lesen funktioniert. Schreiben allerdings nicht.