Autor Beitrag
csharper
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 10.11.08 10:53 
Hi zusammen,

hab mal wieder ein Problem :oops:

Und zwar hab ich einen eigenen Dialog mit einem Treeview dort wähle ich verschiedene Knoten aus. Diese werden dann automatisch (über ein MouseEvent) in ein List<string> gespeichert. Nun möchte ich diesen Inhalt an eine Klasse übergeben.

Hab versucht eine Property zu erstellen die dann die List<string> zurückgibt aber irgendwie funktioniert das nicht.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
Hier versuche ich die List<string> zurückzugeben

public List<string> SelectedFolder
        {
            get { return stringlist; }
        }


ausblenden C#-Quelltext
1:
2:
3:
Hier möchte ich nun die Werte der List<string> aufrufen und weitergeben

return customfolderbrowserdialog.SelectedFolder.ToString();


Es gibt aber nicht den Inhalt der Liste weiter sondern in dem Pfad der dann weitergegeben wird steht

System.Collections.Generic.List`1[System.String]

drin.

Kann mir da einer weiterhelfen wie ich die Pfade übergeben kann? Mit einem ausgewählten Knoten funktioniert es. Aber sobald ich mehrere auswähle geht es nicht mehr.

Grüße
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: Mo 10.11.08 12:46 
Du musst genau darauf achten, von welchem Typ die Variablen sind.

Ist stringlist eine List<string>?
Ja => der erste Code-Schnipsel funktioniert ohne jegliche Konvertierung.
Nein => Du verheimlichst irgendeine Fehlermeldung.

user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
//  Hier möchte ich nun die Werte der List<string> aufrufen und weitergeben
return customfolderbrowserdialog.SelectedFolder.ToString();

Was macht denn ToString()? Es konvertiert den Wert der Eigenschaft SelectedFolder von List<string> nach string. Da es keine überschriebene Methode für ToString gibt, kommt eben der Standardwert heraus; und das ist bei generischen Listen etwas wie der Name der Liste.

Was willst Du beim zweiten Code-Schnipsel erhalten?
List<string> => einfach übergeben
ausblenden C#-Quelltext
1:
List<string> result = customfolderbrowserdialog.SelectedFolder;					

ein String-Array? => einfach konvertieren
ausblenden C#-Quelltext
1:
string[] results = customfolderbrowserdialog.SelectedFolder.ToArray();					

einen langen String mit allen Elementen? => manuell übertragen, etwa so:
ausblenden C#-Quelltext
1:
2:
3:
string result = String.Empty;
foreach(string s in customfolderbrowserdialog.SelectedFolder)
    result += s + Environment.NewLine;

oder sonst etwas? => Erwartungen genauer beschreiben

Aber auf jeden Fall gilt: Typ-Genauigkeit beachten! Jürgen
csharper Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 10.11.08 13:52 
Also



user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:


Ist stringlist eine List<string>?



Ja das ist ein List<string>

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:

Was willst Du beim zweiten Code-Schnipsel erhalten?
List<string> => einfach übergeben
ausblenden C#-Quelltext
1:
List<string> result = customfolderbrowserdialog.SelectedFolder;					

ein String-Array? => einfach konvertieren
ausblenden C#-Quelltext
1:
string[] results = customfolderbrowserdialog.SelectedFolder.ToArray();					

einen langen String mit allen Elementen? => manuell übertragen, etwa so:
ausblenden C#-Quelltext
1:
2:
3:
string result = String.Empty;
foreach(string s in customfolderbrowserdialog.SelectedFolder)
    result += s + Environment.NewLine;

oder sonst etwas? => Erwartungen genauer beschreiben


Eigentlich will ich einfach die Pfade die ich ausgewählt habe erhalten. Obs jetzt ein Array oder eine List<string> ist ist erst mal egal. Es klappt alles bis auf das, dass ich in der 2. Klasse den Dialog als public string aufrufe, dieser brauch einen Rückgabewert und da gibts bei mir immer das falsche aus.
Hier mal damit du weisst wo das falsche dann übergeben wird.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public string ZeigeDialogan()
        {
            ZeigeDialogan dialog = new ZeigeDialogan();
            
            if (dialog.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("You have canceled the Dialog""Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
            
            List<string> folders = dialog.SelectedFolder;
            return folders.ToString(); //Hier gibts dann immer das falsche zurück
            
        }


Grüße
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: Mo 10.11.08 14:00 
user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
Obs jetzt ein Array oder eine List<string> ist ist erst mal egal.

Mir ist es erst recht egal, aber ich will wissen, wofür Du dich entscheidest.

user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
Es klappt alles bis auf das, dass ich in der 2. Klasse den Dialog als public string aufrufe, dieser brauch einen Rückgabewert und da gibts bei mir immer das falsche aus.

Also willst Du doch einen String haben. Dazu passen meine Fehlerbeschreibung bezüglich ToString (bitte nochmals lesen und verstehen!) und mein dritter Code-Vorschlag (es geht wirklich nur mit einer eigenen Schleife). Was gefällt Dir daran nicht, oder was verstehst Du daran nicht?

Jürgen
csharper Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 10.11.08 14:06 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:

Mir ist es erst recht egal, aber ich will wissen, wofür Du dich entscheidest.


Sorry habs falsch verstanden ;-) Mir wär eigentlich eine List<string> lieber.

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:

Also willst Du doch einen String haben. Dazu passen meine Fehlerbeschreibung bezüglich ToString (bitte nochmals lesen und verstehen!) und mein dritter Code-Vorschlag (es geht wirklich nur mit einer eigenen Schleife). Was gefällt Dir daran nicht, oder was verstehst Du daran nicht?


Das mit ToString ist mir schon klar. Werd das mit der eigenen Schleife mal ausprobieren.
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: Mo 10.11.08 14:10 
user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
Mir wär eigentlich eine List<string> lieber.

Ach nee. Dann ändere ich meine letzte Äußerung so:

Dazu passt mein erster Code-Vorschlag. Was gefällt Dir daran nicht, oder was verstehst Du daran nicht?

Jürgen

/Edit
Damit Du es nicht wieder falsch verstehst, weil ich nur die entscheidende Zeile geschrieben habe, hier die komplette Methode:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public List<string> GetFolders()   //  Achtung, doppelte Verwendung Deines Bezeichners
        {
            ZeigeDialogan dialog = new ZeigeDialogan();
            
            if (dialog.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("You have canceled the Dialog""Notification",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
            
            return dialog.SelectedFolder;
        }

Ich bevorzuge übrigens englische Bezeichner, damit schlimmes Denglisch wie MeinFormular_Load vermieden wird.
csharper Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 10.11.08 14:32 
Danke fürs Helfen, werd mich jetzt entweder an der eigenen Schleife oder an deinem Letzten Vorschlag probieren.

Meine Methoden werden ab sofort nur noch in Englisch verfasst ;-)

Mal ne andere Frage wie lange programmierst du schon?


Habs hinbekommen, habs über List<string> gemacht, so wie du in deinem ersten Lösungsvorschlag gesagt hast. hat geklappt, hab dann noch eine andere Methode abändern müßen aber jetzt geht alles.

Grüße und danke