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 FehlermeldungDebug Assertion Failed
Program: ...
File: winocc.cpp
Line 94For 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.