Autor Beitrag
s4nDer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Do 28.08.08 11:30 
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.

ausblenden 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()
        {
            //Pfad ermitteln den User ausgewählt hat
            DirectoryInfo nBrowsedDirectory = new DirectoryInfo(BrowseDialog.SelectedPath);

            //Files aus Ordner ermitteln
            FileInfo[] nFiles = nBrowsedDirectory.GetFiles(sSEARCH_PARAMETER);

            // Listbox mit Werten füllen
            for (int iSchleife = 0; iSchleife <= (nFiles.Length - 1); iSchleife++)
                DataListBox.Items.Add(nFiles[iSchleife]);
        }

        public void bSaveButton_Click(object sender, EventArgs e)
        {          
            //wenn Speichern gedrückt wird, Datei mit Inhalten erstellen
            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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 100

Win XP | Debian | Ubuntu
C# | PHP | VB.NET
BeitragVerfasst: 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.

_________________
~ Wer Rechtschreibfehler findet darf sie behalten ~
lothi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Do 28.08.08 11:51 
Hallo

Meinst du so?

ausblenden C#-Quelltext
1:
2:
foreach (string s in DataListBox.SelectedItems)  
                {


Gruss Lothi
s4nDer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Do 28.08.08 11:59 
Ich habs jetzt einfach mal so probiert...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 28.08.08 12:12 
Hallo,
user profile iconSkiller-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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
foreach (object o in DataListBox.SelectedItems)
{
    FileInfo info = o as FileInfo;
    //  Sicherheitsprüfung
    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:
ausblenden C#-Quelltext
1:
2:
3:
4:
using(StreamWriter nCreateFile = new StreamWriter("Info.csv")) 
{
    //  mach etwas damit
}   //  Close() wird am Ende von using() automatisch ausgeführt

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Do 28.08.08 12:15 
Hallo

Ein Array brauchst du nicht das stimmt:

ausblenden C#-Quelltext
1:
2:
3:
4:
foreach ( ListViewItem item in DataListBox.SelectedItems )
{
  string sitem = item.Text;
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 28.08.08 12:21 
user profile iconlothi hat folgendes geschrieben:
Ein Array brauchst du nicht das stimmt:

Ich sehe beim Speichern nirgends ein Array - auch nicht bei s4nDer.

Bitte besser aufpassen:
user profile iconlothi hat folgendes geschrieben:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 100

Win XP | Debian | Ubuntu
C# | PHP | VB.NET
BeitragVerfasst: 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...

_________________
~ Wer Rechtschreibfehler findet darf sie behalten ~
lothi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: 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