Items der ListBox in Funktion übergeben und speichern/laden
-
Hi!
Wie kann ich die Items einer ListBox in eine Funktion übergeben?
Ich habs mal als ganze ListBox versucht, und auch als ListBox::Items, hat aber nie Funktioniert, da ich es nie geschafft habe, die Texte der einzelnen Items in einen String zu schreiben.
Wie macht man das richtig?Danke
-
Schau doch mal an was ListBox->Items macht.
C++ [LocalizableAttribute(true)] public: property ObjectCollection^ Items { ObjectCollection^ get (); }
Ich denke mit einer foreach Schleife kannst du alle Elemente einzelnd ausgeben und dann einzelnd der function übergeben.
Schreib ruhig wenn du einen Beispielcode brauchst.
-
Also ich habe jetzt folgendes geschafft:
Den parameter in der Funktion muss man wie folgt deklarieren:void Funktion(System::Collections::ArrayList ^'ListBoxListe);
Den Inhalt der Listbox kann man dann folgendermaßen übergeben:
System::Collections::ArrayList ^liste = gcnew Collections::ArrayList(lbxFilesLeave->Items); Funktion(liste)
Ich habe jetzt aber noch ein weiteres Problem:
Ich habe 2 Strings und die Elemente der ListBox, welche ich gerne in eine Datei speichern würde.
Ich habe es bereits mit einer .ini Datei versucht://Testcode String ^IniPath = gcnew String(L"C:\\Test.ini"); WritePrivateProfileString("common","EinPfad","c:\\lol\\",IniPath); WritePrivateProfileString("common","Nochwas","1",IniPath); WritePrivateProfileString("bla","test","0",IniPath);
Wenn ich dann aber die Datei windows.h includeiere, bekomme ich einige Fehlermeldungen:
c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(93) : error C2872: 'IServiceProvider': Mehrdeutiges Symbol
1> kann 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(48) sein: System::IServiceProvider IServiceProvider'
1> oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider"
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(93) : error C3699: "": Diese Referenzierung kann nicht für den Typ "IServiceProvider" verwendet werden.
1> Der Compiler ersetzt "" durch ^", um die Analyse fortzusetzen.
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) : error C2371: 'IServiceProvider': Neudefinition; unterschiedliche Basistypen
1> c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(48): Siehe Deklaration von 'IServiceProvider'
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(117) : error C2872: 'IServiceProvider': Mehrdeutiges Symbol
1> kann 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) sein: IServiceProvider'
1> oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider"
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(231) : error C2872: 'IServiceProvider': Mehrdeutiges Symbol
1> kann 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) sein: IServiceProvider'
1> oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider"
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(238) : error C2872: 'IServiceProvider': Mehrdeutiges Symbol
1> kann 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) sein: IServiceProvider'
1> oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider"
1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\urlmon.h(5174) : error C2872: 'IServiceProvider': Mehrdeutiges Symbol
1> kann 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) sein: IServiceProvider'
1> oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider"
1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\urlmon.h(5176) : error C2872: 'IServiceProvider': Mehrdeutiges Symbol
1> kann 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) sein: IServiceProvider'
1> oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider"
1>.\EinstellungenSpeichern.cpp(10) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>.\EinstellungenSpeichern.cpp(11) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>.\EinstellungenSpeichern.cpp(12) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [4]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
-
Ich habe es jetzt so gelöst, dass Die Daten einfach in eine Textdatei gespeichert werden:
//Aufruf: System::Collections::ArrayList ^liste = gcnew Collections::ArrayList(lbxFilesLeave->Items); saveData(tbxSourcePath->Text, tbxDestPath->Text, liste,Windows::Forms::Application::StartupPath + L"\\Data.dat");
//Funktion: IO::FileStream^ fs = gcnew IO::FileStream(Path, IO::FileMode::Create, IO::FileAccess::Write); IO::StreamWriter ^file = gcnew IO::StreamWriter(fs); file->WriteLine(SourceFolder); file->WriteLine(DestFolder); file->WriteLine("Count=" + System::Convert::ToString(leaveFiles->Count)); for each(String^ str in leaveFiles) { file->WriteLine(str); } file->Close();
Aber das Laden Funktioniert noch nicht Richtig, denn die geladenen Daten werden nicht in den Textboxen angezeigt. Wenn ich versuche, den Adressoperator & zu verwenden, wird immer gemeldet, dass dieser auf String nicht anwendbar ist. Zusätzlich weis ich nicht, wie man die geladenen Daten im Array wieder in die ListBox speichern kann.
hier mein Code://Aufruf: System::Collections::ArrayList ^liste = gcnew Collections::ArrayList(); loadData(tbxSourcePath->Text, tbxDestPath->Text, liste, Windows::Forms::Application::StartupPath + L"\\Data.dat");
//Funktion IO::FileStream^ fs = gcnew IO::FileStream(Path, IO::FileMode::OpenOrCreate, IO::FileAccess::Read); IO::StreamReader ^file = gcnew IO::StreamReader(fs); SourceFolder = file->ReadLine(); DestFolder = file->ReadLine(); String^ buf= gcnew String(file->ReadLine()); int anz = System::Convert::ToInt32(buf->Substring(6,buf->Length-6)); for (int i=0; i<anz; i++) leaveFiles->Add(file->ReadLine()); file->Close();
Wie kann ich es hier bewerkstelligen, dass die Funktion also 3 Rückgabeparameter hat, und diese dann in die Textboxen bzw. ListBox gespeichert werden?