Wie erstelle ich einen "speichern unter..." - Dialog?



  • Hallo,

    ich möchte gern per click auf einen Button das speichern unter.. Dialogfeld erhalten und darin den Speicherort und Dateinamen eingeben können.
    Der Inhalt der Textbox tb_1 soll als Textdatei (*.txt) gespeichert werden.
    Wie stelle ich das an?

    In der Form1 existiert bereits der Button mit dem entsprechenden Codeeintrag:

    private: System::Void bt_speichern_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    	//Speichern-Dialog konfigurieren//
    	//Das Basis-Verzeichnis als Vorgabe in den Dialog übernehmen//
    	saveFileDialog1->InitialDirectory = "C:\\";
    	saveFileDialog1->Filter = "Textdateien (*.txt)|*.txt";
    	saveFileDialog1->FilterIndex = 1;
    	saveFileDialog1->FileName = "Passwort";
    	//Speichern Dialog aufrufen//
    	if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
            {
            ???
            }
    

    Ist der Ansatz richtig und wie geht es weiter? 💡
    Oder war das sozusagen Bulls... und muß anders aussehen. 👎
    Wie sollte es dann aussehen? 😕

    Ähhm, sorry, aber ich steh im Regen.

    Viele Bits und Bytes, Ahmadine



  • Hallo,

    das einfachste wäre den Text in eine TStringList einzufügen und diese dann mittels der Methode 'SaveToFile' abzuspeichern.

    Alternativ kannst du auch die TStreamWriter-Klasse benutzen.

    Edit: sorry, hatte aus Versehen für die Borland VCL gepostet...

    Entweder StreamWriter oder File.WriteText wären somit richtig.



  • Was ist denn der Unterschied zwischen StreamWriter und TStreamWriter?
    Mit StreamWriter habe ich es versucht, scheitere aber am Debugger und dessen Fehlermeldungen, die ich nicht verstehe:

    private: System::Void bt_speichern_Click(System::Object^  sender, System::EventArgs^  e)
        {
        //Speichern-Dialog konfigurieren//
        //Das Basis-Verzeichnis als Vorgabe in den Dialog übernehmen//
        saveFileDialog1->InitialDirectory = "C:\\";
        saveFileDialog1->Filter = "Textdateien (*.txt)|*.txt";
        saveFileDialog1->FilterIndex = 1;
        saveFileDialog1->FileName = "Passwort";
        //Speichern Dialog aufrufen//
        if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
            {
                String ^pw_Datei = gcnew String (tb_1); //Zeile der Fehlermeldung
                FileStream ^fs = nullptr;
                StreamWriter ^sw = nullptr;
                try
                    {
                        fs = gcnew FileStream("C:\\passwort.txt",FileMode::CreateNew);
                        sw = gcnew StreamWriter(fs);
                        sw->WriteLine (tb_1);
                    }
                    catch (Exception ^e)
                    {
                        MessageBox::Show("Datei konnte nicht geöffnet werden!");
                    }
                    finally
                    {
                        if (sw)
                        sw->Close();
                    }
            }
    }
    

    Die dazugehörige Fehlermeldung:
    Fehler 1 Zeile 12 error C2664: 'System::String::String(const wchar_t *)': Konvertierung des Parameters 1 von 'System::Windows::Forms::TextBox ^' in 'const wchar_t *' nicht möglich.

    Und jetzt?
    Es sieht für mich so aus, als müsse ich den Inhalt der tb_1 vor der Übergabe in die Variable pw_Datei noch in wchar_t umwandeln.
    Aber wie mache ich das denn?

    Ziel der ganzen Aktion ist es, den Inhalt der TextBox tb_1 über das speichern unter - Dialogfeld als Text in einer Textdatei abzuspeichern. Über das Dialogfeld möchte ich dann den Namen und Speicherort nach abfragen können.
    Au mann, das das so kompliziert wird hätte ich nicht erwartet.

    Ich weiß nicht weiter.....



  • Hi,

    der Fehler kommt weil du die Textbox übergibst, du musst aber ihre Text Eigenschaft (== Inhalt deiner Textbox) übergeben 😉

    String ^pw_Datei = gcnew String (tb_1->Text);
    


  • Hier sei der übliche Hinweis auf den Thread Windows Forms und Visual C++ MACHT KEINEN SINN! angebracht.


Anmelden zum Antworten