Announcement

Collapse
No announcement yet.

Datenaustausch zwischen zwei Klassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenaustausch zwischen zwei Klassen

    Hallo, ich hoffe Ihr könnt mir wieder weiterhelfen. Ich habe einen neuen Dialog als Ressource eingebunden. Diesem habe ich auch eine Neue Klasse zugewiesen, der dann aus meiner Hauptdialogfeldklasse mit DoModal() aufgerufen und angezeigt wird. Das funktioniert soweit alles wunderbar. Die ersten Probleme hatte ich schon mit dem automatischen Starten einer Memberfunktion der Klasse des zweiten Dialogs.

    Als ich mir den Code angschaut habe, habe ich den Funktionsaufruf in eine Funktion Reingepackt die auf alle Fälle aufgerufen wird. Aber nun zu meinem eigentlichen Problem.

    Meine Hauptdialogfeld Klasse heißt CHSFTPClientDlg, die Klasse des zweiten Dialogs habe ich CHStxtEditor genannt.
    Aus einer Funktion heraus rufe ich mit

    CHStxtEditor myTextEditor;

    myTextEditor.DoModal();

    den zweiten Dialog auf. Im zweiten Dialog starte ich in der DoDataExchange die Funktion die mir eine Datei einliest und Sie im Dialog anzeigt. Der Dateinamen den ich dafür brauche wird durch den ersten Dialog ermittelt, und nun weiß ich nicht wie ich Daten aus dem Ersten Klasse in die zweite Klasse bekomme. Mit so einem Code habe ich es schon Probiert neben viel anderen Untaten (Globale Variablen, neue Header Datei mit definierter Variable und die Header Dateien in den CPP dateien Included, und so weiter und sofort)

    CString FilePath;

    CString csText;

    CHSFTPClientDlg myDlg;

    csText = myDlg.csConnectionData[1];

    MessageBox(csText);

    Die MessageBox dient mir als Test, damit ich weiß dass beim Aufruf sich etwas in der Variable befindet (OK geht auch übern Debugger). Das ist der Code der in der CHStxtEditor Klasse augerufen wird. Und hier brauche ich bestimmte Variablen. Eben einen Dateipfad. Wie komme ich da ran.

  • #2
    Die Frage nach dem Ablauf ist noch offen.
    Sofern 'CHSFTPClientDlg' beim Aufruf von

    myTextEditor.DoModal();

    der Filename bekannt ist, definiere doch einfach eine zusätzliche Methode in der Klasse 'CHStxtEditor' und rufe diese auf. Zum Beispiel
    CHStxtEditor::setFilename(CString name)
    {
    filename = name; // <-- filename sollte eine private variable der Klasse 'CHStxtEditor' sein.
    }

    Zurück zum 1. Dialog 'CHSFTPClientDlg':

    CHStxtEditor myTextEditor;
    myTextEditor.setFilename(name);
    myTextEditor.DoModal();
    ==============================================
    Ein anderes Problem ist natürlich wenn die Dialoge parallel laufen. Dann solltest Du Dich mit Userdefined-Messages zwischen Fenster beschäftigen.

    gruss Andr&#233

    Comment


    • #3
      Nein es ist wie du es sagst, es geht nicht um den ständigen Austausch, es geht einfach nur darum einmal eine Variable zu erhalten, damit ich einen Text einlesen kann.

      AAAlso, ich fasse zusammen, ich rufe aus meinem ersten Dialog erst die Funktion der zweiten Klasse auf, wenn er dann zurückkehrt rufe ich erst dann die DoModal() Methode auf.

      Jetzt löse ich das gerade so, dass ich auf der Festplatte eine Datei erstelle, und nach der DoModal() Methode wird die von der TextEditor Klasse wieder eingelesen und gelöscht.

      Danke für die Antwort.

      Gruß

      Markus Seid

      Comment


      • #4
        Darauf hätte ich auch selber kommen können, jetzt habe ich eine Variable (Typ CString) in der TextEditor Klasse Definiert, und bevor ich die DoModal() Methode aufrufe, gebe ich der Variable noch ihren Inhalt. Ich habs die ganze Zeit in die andere Richting probiert, aber auf sowas banales bin ich echt nicht gekommen.

        Aber wo wir schon dabei sind, wie bekomme ich in ein EditFeld, in dem Zeilenumbrüche erlaubt sind, auch Zeilumbrüche rein. Gut wenn ich natürlich das Programm gestartet habe, dann drücke ich einfach die Enter Taste, aber welchen Wert muss ich in einen CString hinzufügen, damit der mir den Zeilenumbruch reinnimmt. Um die Datei einzulesen nehme ich die CStdioFile Klasse her, diese liest Dateien Zeilenweise ein, nun lasse ich das in einer Schleife laufen, und füge dem CString immerwieder "\n\r" hinzu, irgendetwas kommt dabei ja raus, es scheint auch so, als wenn Zeilenumbrüche drin sind, aber ich bekomm dabei auch so seltsame Balken ("<B>|</B>") rein, und auch sind nicht alle Zeilenumbrüche drin.

        Das einlesen an sich ist kein Problem, aber wie bekomme ich mit einer CString Variable einen Zeilenumbruch in ein Eingabefeld

        Gruß

        Markus Seid

        Comment


        • #5
          OK habs jetzt Selber gefunden, für die die es noch interessiert, wer in einem Eingabefeld einen Zeilenumbruch haben will muss in der Varible ein "\r\n" hinzufügen, wichtig ist die Reihenfolge, erst \r dann \n, wer es umgekehrt macht bekommt zwar Zeilenumbrüche, aber nur so die Hälfte wir in einen Zeilenumbruch gewandelt

          Comment

          Working...
          X