SetDlgItemText Klassenübergreifend



  • Hi, eigentlich sollte ich wissen wie das geht, aber bin grad schier am verzweifeln.

    Ich hab einen Hauptdialog, und eine neu angelegte Klasse. In der neuen Klasse bekomme ich Werte, die ich gerne im Hauptdialog ( z.b. mit SetDlgItemText()) ausgeben möchte. Mit MessageBox gehts, aber ich möchte die Werte gerne in ein EDIT Feld des Hauptdialoges eintragen.
    Wie mache ich das nochmal ?

    Wenn ich

    SetDlgItemText(IDC_EDIT1,s_1);
    

    Dann bekomme ich genau an der Stelle eine exeption, was ja vermutlich auch klar ist, da meine neue Klasse mit IDC_EDIT1 nicht viel anfangen kann ( aber warum kompiliert er das dann überhaupt? ).
    Kann mir jemand helfen ?



  • In http://www.c-plusplus.net/forum/viewtopic-var-t-is-213592.html kannst Du Dir ansehen, wie man die Daten aus dem Unterdialog herausbekommen kann.



  • danke für die Antwort, aber soweit war ich schon. Das Problem ist, das ich ja irgendwie das EDIT feld mit der anderen Klasse bekannt machen muß.

    Angenommen ich habe zwei Klassen :
    CDialog, CDialog_new
    In CDialog_new habe ich das EDIT - feld : IDC_EDIT_1

    Über CDialog möchte ich nun den Inhalt von IDC_EDIT1 verändern.
    Also so :

    void CDialog::OnClickButton()
    {
      CDialog_new dlg;
      dlg.SetDlgItemText(IDC_EDIT1,"Hallo");
    }
    

    Leider geht das so nicht...!

    Vorallem wundert es mich eben das er das kompiliert, weil IDC_EDIT1 eigentlich nicht in CDialog existiert,nur in der _new.



  • kompilieren tut er es ja,
    schließlich erzeugst du dir ne neue Instanz von Dialog_new und setzt dort den Wert im Editfeld.

    Wo lässt du dir den _new Dialog anzeigen? Kann es sein, das du mit 2 verschiedenen Instanzen von Dialog_new arbeitest?

    Ich persönlich würde dem EditFeld eine Membervariable vom Typ CString zuweisen und diese in deinem anderen Dialog ändern. Dann kannst du mithilfe von

    UpdateData(BOOL);
    

    arbeiten.



  • Ach ja oh mein Gott, danke, das wars. Ich dachte ich hätte das schon versucht, aber da hab ich wohl irgendwas falsch gemacht. Aber danke nochmal, genau so gehts.



  • Hi, ich hätte zu dem Thema, Werte an andere Klassen übergeben, nochmal eine Frage.

    1.)
    Folgendes Bsp :

    Ich habe zwei Klassen, in der einen Klasse habe ich einen set-er und get-er für die public Variable : int_wert.

    int CSawDlg::get_wert()
    {
    	return(int_wert);	
    }
    
    void CSawDlg::set_wert(int wert_1)
    {
    	int_wert = wert_1;
    }
    

    Wenn ich den Wert von int_wert, in der anderen Klasse abrufen möchte, bekomme ich einen undefinierten Wert (zb. -845435335 ), obwohl ich den Wert vorher schonmal verändert habe. Warum geht das nicht ?

    2.)

    Anderer Versuch:

    Zwei Klassen, in einer Klasse habe ich RadioButtons. Eine int Variable(m_nRadio) gibt mir den Wert, bzw. welches Feld geklickt wurde.

    CDerNeue dlg;
    
    if(dlg.DoModal() == IDOK)
    {
         UpdateData(TRUE);
         CString str_Ausgabe1;
         int nAuswahl1 = dlg.m_nRadio;
         nAuswahl1 += 1; 
    
         CString help_str;
         help_str.Format("%d",nAuswahl1);
         SetDlgItemText(IDC_EDIT1,help_str);
    }
    

    Das funktioniert wunderbar, in dem gewünschten Editfeld steht nun der Wert, der gewählten Option.
    Wenn ich jetzt aber in einer anderen Klasse abfragen möchte welchen Wert den die Variable m_nRadio hat, dann funktioniert das nicht ( obwohl ich eine Membervariable für das Editfeld habe ).
    Also zb so :

    CSawDlg dlg;
    int val;
    val = atoi(dlg.m_edit1); // m_edit1 = Membervariable für IDC_EDIT1
    
    CString out;
    out.Format("%d",val);
    MessageBox(out); // Ausgabe = 0
    

    Warum ist die Ausgabe = 0 ? Ich hab lese hier doch den Wert aus dem Editfeld aus, der eigentlich den Wert haben sollte von der gewählten Option, aber irgendwie kann ich den Wert nicht übergeben, obwohl im EDIT feld der richtige Wert steht...! Kann mir das jemand erklären ?



  • Ok ich habs, aber dafür musste ich aber nen neuen Dialog+Klasse erstellen, indem halt der Wert den ich brauch nicht über die Klassen hinweg verschiebe, sondern den Wert,den ich brauche, direkt im neuen Dialog erstelle. Komisch isses trotzdem das es vorher nicht funktioniert hat, ich tippe mal darauf das, das irgendwie mit dem Destruktor zu tun hat, der wohl den Wert zerstört hat bevor er übergeben werden konnte. Leider blick ich das noch nicht so ganz wie das mit den Konstruktoren/Destruktoren so abläuft. Naja muss das mal lernen :).Aber wenigstens gehts jetzt


Anmelden zum Antworten