Entwickler-Ecke
WinForms - Probleme mit der Übergabe und Auswertung von eigenem Dialog
csharper - Mo 10.11.08 10:53
Titel: Probleme mit der Übergabe und Auswertung von eigenem Dialog
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.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| Hier versuche ich die List<string> zurückzugeben
public List<string> SelectedFolder { get { return stringlist; } } |
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 - 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.
csharper hat folgendes geschrieben : |
C#-Quelltext 1: 2:
| 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
C#-Quelltext
1:
| List<string> result = customfolderbrowserdialog.SelectedFolder; |
ein
String-Array? => einfach konvertieren
C#-Quelltext
1:
| string[] results = customfolderbrowserdialog.SelectedFolder.ToArray(); |
einen langen
String mit allen Elementen? => manuell übertragen, etwa so:
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 - Mo 10.11.08 13:52
Also
JüTho hat folgendes geschrieben : |
Ist stringlist eine List<string>?
|
Ja das ist ein List<string>
JüTho hat folgendes geschrieben : |
Was willst Du beim zweiten Code-Schnipsel erhalten?
List<string> => einfach übergeben
C#-Quelltext 1:
| List<string> result = customfolderbrowserdialog.SelectedFolder; |
ein String-Array? => einfach konvertieren
C#-Quelltext 1:
| string[] results = customfolderbrowserdialog.SelectedFolder.ToArray(); |
einen langen String mit allen Elementen? => manuell übertragen, etwa so:
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.
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(); } |
Grüße
JüTho - Mo 10.11.08 14:00
csharper hat folgendes geschrieben : |
| 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.
csharper hat folgendes geschrieben : |
| 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 - Mo 10.11.08 14:06
JüTho hat folgendes geschrieben : |
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.
JüTho hat folgendes geschrieben : |
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 - Mo 10.11.08 14:10
csharper hat folgendes geschrieben : |
| 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:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| public List<string> GetFolders() { 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!