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?


Anmelden zum Antworten