Speichern
-
Das ist eigentlich nicht schwer, wenn man weiss wie, es geht.
CEdit* pStartEdit = (CEdit*) GetDlgItem(ID_EDIT1); //Zeiger auf erste EditBox CEdit* pEndEdit=(CEdit*)GetDlgItem(ID_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); pEdit->SetWindowText(strReadBuffer); }
Das wäre eine Idee,die mir so einfällt.
Eine andere:CEdit* pEdit = (CEdit*) GetDlgItem(ID_EDIT1);// erste EditBox if (pEdit) // überprüfen, ob vorhanden { do { ReadFile.ReadString(strReadBuffer); // String einlesen pEdit->SetWindowText(strReadBuffer); // Text setzen pEdit = (CEdit*)GetNextDlgTabItem(pEdit); // Zeiger auf nächste Box setzen { while (pEdit != NULL); }
Ich bin natürlich davon ausgegangen, dass du nur EditBoxen nutzt.
Ach ja, ich habe diese Beispiele nicht ausprobiert. Falls es Probleme gibt, dann melde dich.
-
Paul_C ich habe deine Vorschläge ausprobiert und folgende Fehlermeldungen erhalten. Hier ist der Code zum ersten Vorschlag und dessen Fehlermeldungen. Ich hoffe du kannst mir weiter helfen.
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)) { 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); pEdit->SetWindowText(strReadBuffer); } } }
Fehlermeldungen:
error C2065: 'pstartEdit': nichtdeklarierter Bezeichner
error C2227: Der linke Teil von '->GetDlgCtrlID' muss auf Klasse/Struktur/Union zeigen Typ ist ''unknown-type''
error C2065: 'pendEdit': nichtdeklarierter Bezeichner
error C2227: Der linke Teil von '->GetDlgCtrlID' muss auf Klasse/Struktur/Union zeigen Typ ist ''unknown-type''
-
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.