Speichern



  • if(ReadFile.Open("C:\\Data.txt", CFile::modeRead)) 
    {
        CEdit* pStartEdit = (CEdit*) GetDlgItem(IDC_EDIT1); //Zeiger auf erste EditBox
        CEdit* pEndEdit=(CEdit*)GetDlgItem(IDC_EDIT2);//Zeiger auf lezte EditBox 
        int startID = pstartEdit->GetDlgCtrlID();  // habe mich vertippt muss pStartEdit heissen 
        int endID   = pendEdit->GetDlgCtrlID(); //und hier pEndEdit!
    
        for (int i = startID; i<= endID; i++) 
        { 
            ReadFile.ReadString(strReadBuffer); 
            CEdit* pEdit = (CEdit*) GetDlgItem(i); 
            pEdit->SetWindowText(strReadBuffer); 
        } 
    
    }
    

    Haben sich 2 Tippfehler eingeschlichen. 😃



  • Kann das Programm jetzt ohne Probleme starten.Danke. Doch wenn ich das Dialogfenster im Menü aufrufen will erhalte ich eine Fehlermeldung und muss das Programm schließen.
    Hier ist die Fehlermeldung

    Debug Assertion Failed
    Program: ...
    File: winocc.cpp
    Line 94

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.



  • Bei der Fehlermeldung kann ich nichts zu sagen.
    Aber setze mal ein paar Breakpoints und debug mal und schaue dir dabei die Werte der Zeiger, etc an.



  • hier ist noch der Code den ich angezeigt bekommen wenn ich bei der Fehlermeldung auf "wiederholen" klicke. Dann wechselt er in den Debug und ziegt mir diesen Code:

    CWnd* CWnd::GetDlgItem(int nID) const
    {
    	ASSERT(::IsWindow(m_hWnd));
    
    	if (m_pCtrlCont == NULL)
    		return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
    	else
    		return m_pCtrlCont->GetDlgItem(nID);
    }
    


  • Scheint wohl, dass dein Programm eine EditBox nicht 'finden' kann.
    Dann aber versucht, einen Text zu setzen.
    Versuch mal:

    ...
    ReadFile.ReadString(strReadBuffer);
    CEdit* pEdit = (CEdit*) GetDlgItem(i); 
    if (pEdit)
        pEdit->SetWindowText(strReadBuffer); 
    ...
    

    Dann überprüft dein Programm vorher, ob der Zeiger gültig ist.



  • Hab den Code geändert doch leider erscheint die Fehlermeldung immer noch.
    Hier ist der Code:

    CDaten::CDaten(CWnd* pParent /*=NULL*/)
    	: CDialog(CDaten::IDD, pParent)
    	, m_sText(_T(""))
    	, m_sText2(_T(""))
    {
    	CString strReadBuffer; 
    
    	CStdioFile ReadFile; 
    	if(ReadFile.Open("C:\\Data.txt", CFile::modeRead)) 
    	{
    		while(ReadFile.ReadString(strReadBuffer)) 
    		{ 
    		CEdit* pStartEdit = (CEdit*) GetDlgItem(IDC_EDIT1); //Zeiger auf erste EditBox 
    		CEdit* pEndEdit=(CEdit*)GetDlgItem(IDC_EDIT2);//Zeiger auf lezte EditBox 
    		int startID = pStartEdit->GetDlgCtrlID(); 
    		int endID   = pEndEdit->GetDlgCtrlID(); 
    
    		for (int i = startID; i<= endID; i++) 
    			{ 
    				ReadFile.ReadString(strReadBuffer);
    				CEdit* pEdit = (CEdit*) GetDlgItem(i); 
    				if (pEdit) 
    				pEdit->SetWindowText(strReadBuffer);
    			}
    
    		} 
    	}
    }
    


  • Kontrolliere mal, ob das dann noch diese Zeilen sind.
    Doppelklick auf Fehlermeldung.
    Sonst zeige mal die aktuellen Fehlermeldungen.



  • Erst mal herzlichen dank, dass du dich so bemühst.
    Die Fehlermeldung ist noch die gleiche und auch die Zeilen sind die selben.

    P.S: Soll ich dir das Programm per e-mail zu schicken, sodass du dir es mal persönlich angucken kannst?(kann auch eine neue e-mail adresse erstellen und da hochladen so erfährt keiner deine e-mail adresse)



  • Du versuchst, im Konstruktor deiner Dialogklasse auf die Steuerlemente zuzugreifen. Die sind aber zu dem Zeitpunkt, wenn der Konstruktor ausgeführt wird, noch gar nicht erstellt. Üblicherweise macht man so etwas in OnInitDialog.



  • Hört sich plausibel an.
    Doch wie binde ich OnInitDialog in meinen Code ein?



  • Hallo
    hab OnInitDialog eingebunden, jetzt kann ich zwar das Dialogfeld wieder aufrufen ohne Fehler, doch wird das Eingegebene nicht gespeichert. Man erhält jedesmal wenn man das Dialogfeld aufruft leere Edit Boxen.
    Hier ist der neue Code(Zur Übersicht ist hier der komplette Code von Daten.cpp und Daten.h)
    Daten.cpp

    // Daten.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "TestD.h"
    #include "Daten.h"
    
    // CDaten-Dialogfeld
    
    IMPLEMENT_DYNAMIC(CDaten, CDialog)
    CDaten::CDaten(CWnd* pParent /*=NULL*/)
    	: CDialog(CDaten::IDD, pParent)
    	, m_sText(_T(""))
    	, m_sText2(_T(""))
    {/*
    	CString strReadBuffer; 
    
    	CStdioFile ReadFile; 
    	if(ReadFile.Open("C:\\Data.txt", CFile::modeRead)) 
    	{
    		while(ReadFile.ReadString(strReadBuffer)) 
    		{ 
    		CEdit* pStartEdit = (CEdit*) GetDlgItem(IDC_EDIT1); //Zeiger auf erste EditBox 
    		CEdit* pEndEdit=(CEdit*)GetDlgItem(IDC_EDIT2);//Zeiger auf lezte EditBox 
    		int startID = pStartEdit->GetDlgCtrlID(); 
    		int endID   = pEndEdit->GetDlgCtrlID(); 
    
    		for (int i = startID; i<= endID; i++) 
    			{ 
    				ReadFile.ReadString(strReadBuffer);
    				CEdit* pEdit = (CEdit*) GetDlgItem(i); 
    				if (pEdit)
    				pEdit->SetWindowText(strReadBuffer);
    			}
    
    		} 
    	}*/
    }
    
    BOOL CDaten::OnInitDialog() 
    {
        CDialog::OnInitDialog();
    
    	CString strReadBuffer; 
    
    	CStdioFile ReadFile; 
    	if(ReadFile.Open("C:\\Data.txt", CFile::modeRead)) 
    	{
    		while(ReadFile.ReadString(strReadBuffer)) 
    		{ 
    		CEdit* pStartEdit = (CEdit*) GetDlgItem(IDC_EDIT1); //Zeiger auf erste EditBox 
    		CEdit* pEndEdit=(CEdit*)GetDlgItem(IDC_EDIT2);//Zeiger auf lezte EditBox 
    		int startID = pStartEdit->GetDlgCtrlID(); 
    		int endID   = pEndEdit->GetDlgCtrlID(); 
    
    		for (int i = startID; i<= endID; i++) 
    			{ 
    				ReadFile.ReadString(strReadBuffer);
    				CEdit* pEdit = (CEdit*) GetDlgItem(i); 
    				if (pEdit)
    				pEdit->SetWindowText(strReadBuffer);
    			}
    
    		} 
    	}
    	return TRUE;
    
    }
    
    CDaten::~CDaten()
    {
    }
    
    void CDaten::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1, m_sText);
    	DDX_Text(pDX, IDC_EDIT2, m_sText2);
    }
    
    BEGIN_MESSAGE_MAP(CDaten, CDialog)
    END_MESSAGE_MAP()
    
    // CDaten-Meldungshandler
    

    Hier ist Daten.h:

    #pragma once
    #include "TestD.h"
    
    // CDaten-Dialogfeld
    
    class CDaten : public CDialog
    {
    	DECLARE_DYNAMIC(CDaten)
    
    public:
    	CDaten(CWnd* pParent = NULL);   // Standardkonstruktor
    	virtual ~CDaten();
    
    // Dialogfelddaten
    	enum { IDD = IDD_DIALOG1 };
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    	virtual BOOL OnInitDialog();
    
    	DECLARE_MESSAGE_MAP()
    public:
    	CString m_sText;
    	CString m_sText2;
    };
    


  • Habe gerade nicht viel Zeit. Vielleicht nachher.
    Kannst mir aber auch gerne dein Projekt zusenden. Vorher aber zippen und den inhalt des Debug-Ordners löschen.

    In meinem Profil findest du die E-mail-Adresse. 😉


Anmelden zum Antworten