Entwickler-Ecke
IO, XML und Registry - Kann nicht auf Array zugreifen
s4nDer - Do 28.08.08 11:30
Titel: Kann nicht auf Array zugreifen
Hallo,
ich habe eine Listbox und möchte die Werte der verschiedenen Elemente is eine Datei speichern.
Problem ist jetzt das ich nicht auf das Array zugreifen kann in dem die Elemente gespeichert sind.
ist wahrscheinlich ne sau billige Frage aber ich weiß es nich weil ich halt noch nicht so lange programmiere.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| public void ListBox_fuellen() { DirectoryInfo nBrowsedDirectory = new DirectoryInfo(BrowseDialog.SelectedPath);
FileInfo[] nFiles = nBrowsedDirectory.GetFiles(sSEARCH_PARAMETER);
for (int iSchleife = 0; iSchleife <= (nFiles.Length - 1); iSchleife++) DataListBox.Items.Add(nFiles[iSchleife]); }
public void bSaveButton_Click(object sender, EventArgs e) { if (SaveDialog.ShowDialog() == DialogResult.OK) { StreamWriter nCreateFile = new StreamWriter("Info.csv"); foreach ( in DataListBox.SelectedItems) { nCreateFile.WriteLine(TextBoxDataName.Text); nCreateFile.WriteLine(TextBoxVersion.Text); nCreateFile.WriteLine(TextBoxChangingDate.Text); nCreateFile.Close(); } } } |
Wie ihr seht fehlt in der foreach Schleife der Typ. Da will ich das Array eintragen.
Ergebnis soll dann sein das er nur die Daten in die Datei schreibt die selektiert sind.
Wäre für jede Art von Hilfe dankbar.
Gruß s4nDer
Skiller-1988 - Do 28.08.08 11:51
Also vorausgesetzt ich habe dich richtig verstanden, liegt das Problem darin das dass Array was du in der Methode "public void ListBox_fuellen()" anlegst nicht in der "public void bSaveButton_Click" verwenden kannst.
Das liegt daran dass du den Gültigkeitsbereich nicht beachtest weil das Array so ja nur lokal innerhalb der Methode ListBox_fuellen gültig ist.
Ich würde dir raten entweder das Array und seinen Inhalt zu übergeben oder es global in der Klasse zu Deklarieren, dann müsste es Funktionieren.
lothi - Do 28.08.08 11:51
Hallo
Meinst du so?
C#-Quelltext
1: 2:
| foreach (string s in DataListBox.SelectedItems) { |
Gruss Lothi
s4nDer - Do 28.08.08 11:59
Ich habs jetzt einfach mal so probiert...
C#-Quelltext
1: 2:
| foreach (FileInfo test in DataListBox.SelectedItems) { |
Wahrscheinlich brauche ich das Array garnich weil er ja weiß welche selektiert sind -.- sry
Problem is jetzt nur das es nicht hinbekommt wenn mehrere selektiert sind. bei nur einem klappt es, bei mehreren leider nicht.
JüTho - Do 28.08.08 12:12
Hallo,
Skiller-1988 hat folgendes geschrieben: |
Ich würde dir raten entweder das Array und seinen Inhalt zu übergeben oder es global in der Klasse zu Deklarieren, dann müsste es Funktionieren. |
Davon möchte ich eher abraten: Ein Objekt (d.h. Instanz einer Klasse) sollte nur solange existieren, wie es benötigt wird. Wenn die Informationen aus dem Dir-Array nicht mehrfach benutzt werden, ist es nicht sinnvoll, sie "globaler" zu deklarieren.
@s4nDer
Dein Problem besteht darin, dass ListBox.SelectedItems eine
SelectedObjectCollection ist, während die einzelnen Items nur allgemein vom Typ
object sind. Aber Du bist der Programmierer: Du weißt, welche Art von Einträgen Du registriert hast. Du musst deshalb jedes einzelne Objekt passend casten:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| foreach (object o in DataListBox.SelectedItems) { FileInfo info = o as FileInfo; if (info != null) { nCreateFile.WriteLine(info.FileName); } } |
Dein Versuch kann u.U. klappen, es ist aber nicht sicher. Ich hätte eigentlich schon ein Veto des Compilers erwartet, denn SelectedItems enthält nunmal von der Definition her keine FileInfo-Instanzen.
Übrigens hast Du den Fehler gemacht, dass der StreamWriter in der Schleife geschlossen wird. Das führt natürlich im zweiten Durchgang zu einer Exception. Besser ist (auch aus diesem Grund) sowieso ein
using-Block:
C#-Quelltext
1: 2: 3: 4:
| using(StreamWriter nCreateFile = new StreamWriter("Info.csv")) { } |
Gruß Jürgen
PS. Vielleicht liegt der von Dir jetzt gemeldete Fehler gar nicht an der Schleife, sondern am StreamWriter. Auch deshalb ist es immer hilfreich, eine Exception genau zu untersuchen und anzugeben.
lothi - Do 28.08.08 12:15
Hallo
Ein Array brauchst du nicht das stimmt:
C#-Quelltext
1: 2: 3: 4:
| foreach ( ListViewItem item in DataListBox.SelectedItems ) { string sitem = item.Text; } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
JüTho - Do 28.08.08 12:21
lothi hat folgendes geschrieben: |
Ein Array brauchst du nicht das stimmt: |
Ich sehe beim Speichern nirgends ein Array - auch nicht bei s4nDer.
Bitte besser aufpassen:
lothi hat folgendes geschrieben: |
C#-Quelltext 1:
| foreach ( ListViewItem item in DataListBox.SelectedItems ) |
|
ListViewItem hat nichts mit ListBox zu tun. Auch Dein obiger Vorschlag mit string führt in die Irre.
Jürgen
s4nDer - Do 28.08.08 12:54
Wie es aussieht liegt bzw. lag es wirklich an der Exception die beim 2. Durchlauf geworfen wurde aufgrund des Close() vom StreamWriter.
Erklärt natürlich auch warum es bei nur einem markierten Element funktioniert hat.
Schönen Dank an alle.
Skiller-1988 - Do 28.08.08 13:01
Sorry wegen meiner verwirrung mit dem ARRAY aber ich bin vom Thema des Threads ausgegangen "Kann nicht auf Array zugreifen" und ich hab es so verstanden das er das Array von der füllen Methode in der Save Methode verwenden will.
Aber als ich dann richtig überlegt habe was er da eigentich machen will ist mir auch aufgefallen das es nicht ums Array geht.
Naja wollte nur sagen vergesst das mit dem Array...
lothi - Do 28.08.08 14:53
Hallo
Also so verwirrend finde ich jetzt meine Input mit dem String nicht.
Eine ListBox mit Mehrfachauswahl kann man ja so auslesen und das habe ich auch so verstanden:
Zitat: |
Wie ihr seht fehlt in der foreach Schleife der Typ. |
8)
Gruss Lothi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!