richTextBox Typproblem mit string



  • Hallo,

    ich hab da ein kleines Problem mit den StringTypen.

    Um die richTextBox zu befüllen, wird eine Datei ausgelesen. Die Daten sollen dann mit AppendText in die Box geschrieben werden.

    private: System::Void bt_file_read_Click(System::Object^  sender, System::EventArgs^  e) {
    
    	ifstream f;
    	string buffer="";
    	f.open(fname, ios::in);
        while (!f.eof())
        {
            getline(f,buffer);
    	    richTextBox1->AppendText(buffer);
        }
        f.close();
    }
    

    Wenn ich string buffer="" deklariere, erscheint folgende Fehlermeldung:
    Fehler 2 error C2664: 'System::Windows::Forms::TextBoxBase::AppendText': Konvertierung des Parameters 1 von 'std::string' in 'System::String ^' nicht möglich c:\users\chief\desktop\programmierung in c++\winforms2\winforms2\Form1.h 244

    Deklariere ich char buffer[255]="", funktioniert es auch nicht (noch mehr Fehlermeldungen).

    Ändere ich die append Anweisung auf richTextBox1->AppendText("Hallo"), geht es.

    Aber das ist ja nicht das, ich erreichen will.

    Kann mir jemand sagen, was ich falsch mache?

    Pascal



  • ...



  • Swordfish schrieb:

    Daß das weder C++ noch MFC ist, ist dir eh klar, gell? Sonst: std::string in System::String konvertieren?.

    Mir ist eigentlich gar nicht klar, was da abläuft. Ich vermute, die C++ string kollidiert mit Windows.System.String. Irgendwie

    Ich hab das jetzt aufgrund des Links geändert in:

    private: System::Void bt_file_read_Click(System::Object^  sender, System::EventArgs^  e) {
    
    	ifstream f;
        System::String ^ str = gcnew System::String(stdstr.c_str());
    	f.open(fname, ios::in);
        while (!f.eof())
        {
            getline(f,str);
            richTextBox1->AppendText(str);
        }
        f.close();
    }
    

    Ergebnis ist statt einer Fehlermeldung sind es jetzt 10 Fehlermeldungen.

    Ich hab die Vermutung, es könnte funktionieren, wenn man da irgendwie eine to_string Anweisung einbinden könnte.

    Was helfen würde, wäre konkreter Code.

    So schwierig dürfte das Problem eigentlich nicht sein. Im Internet hab ich aber nichts gefunden.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wie gesagt, wenn ich:

    private: System::Void bt_file_read_Click(System::Object^  sender, System::EventArgs^  e) {
    
    	ifstream f;
    	string buffer="";
    	f.open(fname, ios::in);
    	int zahl=5;
    	while (!f.eof())
        {
    
            getline(f,buffer);
            listBox1->Items->Add("Hallo Listbox");
            richTextBox1->AppendText("Hallo richTextBox"); 
    		}
        f.close();
    }
    

    Einen Text "Hallo" einfüge, funktioniert es tadellos.

    Bei Textbox dasselbe Problem. textbox->Item->Text=buffer und schon paßt der Datentyp wieder nicht, selbe Fehlermeldung.

    Es fehlt die Typumwandlung.



  • Ich würde dir anraten, mit C++/CLI bzw. C++/CX noch ein wenig zu warten. Der Einstieg dort ist nochmal eine Spur heftiger als bei normalem C++. Um auf deinen Code Bezug zu nehmen:

    private: System::Void bt_file_read_Click(System::Object^  sender, System::EventArgs^  e) {
    
        ifstream f;
        string buffer="";
        f.open(fname, ios::in);
        while (!f.eof())
        {
            getline(f,buffer);
            richTextBox1->AppendText(gcnew System::String(buffer.c_str()));
        }
        f.close();
    }
    

    Bevor du jedoch sowas baust musst du zuerst verstehen, warum es nicht einfach so funktionieren kann wie du es geschrieben hast. Um C++/CLI zu verstehen musst du C# und C++ sehr gut verstehen.



  • /rant/ schrieb:

    Ich würde dir anraten, mit C++/CLI bzw. C++/CX noch ein wenig zu warten. Der Einstieg dort ist nochmal eine Spur heftiger als bei normalem C++. Um auf deinen Code Bezug zu nehmen:

    Das ist nicht mein Code, sondern der veränderte Code aufgrund des geposteten Links, der nichts gebracht hat.

    Mein Code ist dieser hier:

    private: System::Void bt_file_read_Click(System::Object^  sender, System::EventArgs^  e) {
    
    	ifstream f;
    	string buffer="";
    	f.open(fname, ios::in);
    	while (!f.eof())
        {
            getline(f,buffer);
            richTextBox1->AppendText(buffer);
        }
        f.close();
    }
    

    Es würde auch mehr helfen, wenn du einfach die Info lieferst, wie man den Code zum Laufen bringt, anstelle darauf hinzuweisen, daß man noch viel lernen muß.
    Mit so einem Posting kann ich nicht das geringste anfangen. Ist ja eigentlich eine Frechheit, sowas zu posten.

    Es ist klar, der Code funktioniert mit der Textformatierung " ". Das heißt, man kann ohne weiteres Text in die richTextBox schreiben, aber eben nicht mit dem Datentyp string von C++. Und auch nicht mit dem Datentyp char array[] aus C. Eigentlich unverständlich. Das ist eine einfache Zeichenfolge.

    Es fehlt hier nur die Typumwandlung.

    Da fehlt eine einzige Zeile Code, sonst nichts.

    MÖglicherweise auch nicht mit AppendText, sondern andere Eigenschaft. Da bei der textBox aber mit ->Items->add dasselbe Problem auftritt, liegt es am Datentyp string.

    Pascal



  • /rant/ schrieb:

    Ich würde dir anraten, mit C++/CLI bzw. C++/CX noch ein wenig zu warten. Der Einstieg dort ist nochmal eine Spur heftiger als bei normalem C++. Um auf deinen Code Bezug zu nehmen:
    ...
    Bevor du jedoch sowas baust musst du zuerst verstehen, warum es nicht einfach so funktionieren kann wie du es geschrieben hast. Um C++/CLI zu verstehen musst du C# und C++ sehr gut verstehen.

    Das sind so die Postings, die man sich wünscht. Keine Hilfe, aber Belehrungen und falsche Ratschläge.

    Das Problem ist gelöst.

    Es ist tatsächlich nur ein kleiner Cast erforderlich von

    std::string auf System::String^

    Wenn einem keiner hilft, muß man sich eben selbst helfen.

    Pascal



  • pascal2009 schrieb:

    Wenn einem keiner hilft, muß man sich eben selbst helfen.

    Pascal

    Ja. Bitte hilf Dir selbst und frage hier nicht mehr um Rat.
    Du bist ja nur noch ätzend.


Anmelden zum Antworten