Texteingabe mit CString ?



  • Also ich habe mir einen Button erstellt, der eine Dialogbox öffnet in der sich ein Eingabefeld befindet.
    Ich möchte nun gerne den Inhalt Speichern um ihn anschließend in der OnPaint von ChildView verwenden zu können.
    Es handelt sich um ein STI Fenster.

    Ich bin wie folgt vorgegangen:

    Ich habe zunächst dem Dialogfeld eine Variable zugewisen

    Das sieht dann in der Dialog Klasse wie folgt aus:

    public:
    	CDlgTEXT_EINGABE(CWnd* pParent = NULL);   // Standardkonstruktor
    
    // Dialogfelddaten
    	//{{AFX_DATA(CDlgTEXT_EINGABE)
    	enum { IDD = IDD_TEXT_EINGABE };
    	CString	m_text_eingabe;         //für Text Speichern
    	//}}AFX_DATA
    

    Nun hab ich in der ChildView eine ähnliche Variable public deklariert.

    // Implementierung
    public:
    	CString textEingabe;                  //Text Speichern
    	virtual ~CChildView();
    

    Der Funktion für den Button befindet sich in der Main Frame
    Dort schiebe ich den Inhalt von der einen Variable in die andere:

    void CMainFrame::OnButtonTexteingabe() 
    {
    	CDlgTEXT_EINGABE dlg;
    
    	if (dlg.DoModal() == IDOK)
    	{
    		m_wndView.textEingabe= dlg.m_text_eingabe;
    	}
    
    }
    

    Wenn ich jetzt mein Programm ausführe und sich die dialogbox öffne und einen Text zur laufzeit eingebe, stürtzt das Programm zur laufzeit ab.

    Hab ich einen Denkfehler gemacht?
    Oder ist CString der falsche um Texteingabe zu speichern?


  • Mod

    Und wo stürzt es ab?
    Alles was ich soweit sehen kann ist richtig!



  • ich vermute mal das du den text aus dem control liest erst wenn du danach fragst
    das problem ist, das edit control wurde nach dem IDOK schon zerstoert

    machs am besten so das die variable "m_text_eingabe" geschrieben wird bevor das OK ausgefuehrt wird
    also

    void Blabla::OnOk()
    {
        this->GetDlgItemText(IDC_EDIT, m_text_eingabe);
        CWnd::OnOk();
    }
    


  • Das Programm ist zur Laufzeit abgestürtzt, wenn ich etwas in die dialogbox eingeben habe und ok eingeben habe.

    Aber ich hab den Fehler gefunden 😉

    ich habe im ChildView Konstruktor vergessen die String Variable mit einem standartwert zu initalisieren.

    CChildView::CChildView()
    {
    	textEingabe = _T("");              
    
    }
    

    da diese Zuweisung Fehlte und beim anderen CString

    CDlgTEXT_EINGABE::CDlgTEXT_EINGABE(CWnd* pParent /*=NULL*/)
    	: CDialog(CDlgTEXT_EINGABE::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CDlgTEXT_EINGABE)
    	m_text_eingabe = _T("");
    	//}}AFX_DATA_INIT
    }
    

    gemacht wurde crashte das Programm offenbar wenn ich
    in der OnButtonTexteingabe

    m_wndView.textEingabe= dlg.m_text_eingabe;    //Weitergabe des
    

    mache.


  • Mod

    1. Das kann nie und nimmer die Ursache sein für einen Crash. Ein CString wird automatisch mit einem leeren String initialisiert.

    2. Dein Code initialisiert CString zweimal!
    Besser:
    CChildView::CChildView()
    : textEingabe(_T(""))
    {
    }


Anmelden zum Antworten