Checkbox Abhacken
-
ich bin total durcheinander..
Wo muss ich GetBDatum() funktion schreiben? was muss der Funktion machen???
-
Ich würd mich sehr freuen wenn mir jemand bisschen deutlicher HElfen könnte..
Vielen Dank
-
keiner da?????
-
Jede halbe Stunde frech pushen wird dir auch nicht weiterhelfen. :p
-
Na man das is doch ganz einfach
dlg.m_bDatum=WERT; //mit deinem gemerkten Wert die Variable initialisieren if(dlg.DoMoldal()==IDOK) { bWert=dlg.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten }
Jetzt kannst du das noch mit Getter und Setter-Funktionen die du in deiner Dialog-Klasse erstellst setzen und zurücklesen, wenn du das unbedingt machen willst, das würde dann der Funktion GetBDatum entsprechen.
So sollten deine Fragen beantwortet sein.
-
Yeah, hack it ab!
-
CMyPropertySheet propSheet; propSheet.DocPt2(m_pDoc1); //+-----------------------------------------------------------------------------+ //! Test Anfang ! //+-----------------------------------------------------------------------------+ BOOL bWert; // propSheet.m_Page3.m_bDatum=FALSE; //dlg.m_bDatum=WERT; //mit deinem gemerkten Wert die Variable initialisieren if(propSheet.DoModal()==IDOK) { bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten } //+-----------------------------------------------------------------------------+ //! Test Ende ! //+-----------------------------------------------------------------------------+
Hallo nochmal ,
ich habe mein Code so geändert aber es funktioniert immer noch nicht.
Ich tue Checkbox abhacken und auf OK button drücken , und wenn ich mein Dialog nochmal öffne, dann sehe ich dass Checkbox nixht abgehackt ist..Woran kann das liegen , muss ich noch was ändern??
Vielen Dank
-
weil bWert ein Member deiner dialog-Klasse sein muß, sonnst ist doch der Wert verlohren wenn die Funktion beendet ist. Diesen Wert mußt du natürlich auch wieder in deiner Page setzen vor aufruf von DoModal.
-
CMyPropertySheet propSheet; propSheet.DocPt2(m_pDoc1); //+-----------------------------------------------------------------------------+ //! Test Anfang ! //+-----------------------------------------------------------------------------+ propSheet.m_Page3.bWert=FALSE; if(propSheet.DoModal()==IDOK)//propSheet.m_Page3.DoModal()==IDOK { propSheet.m_Page3.bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten } //+-----------------------------------------------------------------------------+ //! Test Ende ! //+-----------------------------------------------------------------------------+
ich habe mein Code so wie oben geändert aber es funktioniert einfach nicht.
bWert ist jetzt member Variable meines Pages/bzw.Dialog Klasse siehe unten.
propSheet.m_Page3.bWert
Was muss noch geändert werden..?
Unten kann man mein Page/dialog Klasse funktionen sehen , soll ich da etwas ändern???Vielen Dank
// Eigenschaftenseite CMyPropertyPage3 IMPLEMENT_DYNCREATE(CMyPropertyPage3, CPropertyPage) CMyPropertyPage3::CMyPropertyPage3() : CPropertyPage(CMyPropertyPage3::IDD) { //{{AFX_DATA_INIT(CMyPropertyPage3) m_bDatum = FALSE;// //}}AFX_DATA_INIT m_pDoc = NULL; } CMyPropertyPage3::~CMyPropertyPage3() { } void CMyPropertyPage3::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyPropertyPage3) DDX_Check(pDX, IDC_DATUM, m_bDatum); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMyPropertyPage3, CPropertyPage) //{{AFX_MSG_MAP(CMyPropertyPage3) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten CMyPropertyPage3 BOOL CMyPropertyPage3::OnInitDialog() { // Um die Check box initialisieren zu können // Was muss hier gemacht werden..! Init(); if (m_pDoc == NULL) return FALSE; CPropertyPage::OnInitDialog(); CWnd* pWnd = GetDlgItem(IDOK); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDCANCEL); if (pWnd) pWnd->ShowWindow(SW_HIDE); return TRUE; } void CMyPropertyPage3:: Init() { CFrameWnd* pWnd = (CFrameWnd*)AfxGetMainWnd(); if (pWnd == NULL) return; m_pDoc = (CDenemeStatistikDoc*)pWnd->GetActiveDocument(); } void CMyPropertyPage3::OnOK() { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen CPropertyPage::OnOK(); }
-
Du verstehst den Sinn nicht wenn du schreibst
propSheet.m_Page3.bWert=FALSE;
und dann DoModal aufrufst, was glaubst du wie der Wert von bWert bei jeden aufruf ist? Immer FALSE weil du das ja genau so setzt. Leg doch die ganzen Variablen die du dir Merken willst in M-Doc also deiner Documentenklasse an und lies diese werte bei OnIni in deine Variablen ein und bei OnOK() wieder in dein Document zurück.
BOOL CMyPropertyPage3::OnInitDialog() { // Um die Check box initialisieren zu können // Was muss hier gemacht werden..! Init(); if (m_pDoc == NULL) return FALSE; CPropertyPage::OnInitDialog(); bWert = m_pDoc->bWert; //Variablen einlesen CWnd* pWnd = GetDlgItem(IDOK); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDCANCEL); if (pWnd) pWnd->ShowWindow(SW_HIDE); return TRUE; } void CMyPropertyPage3::OnOK() { m_pDoc->bWert = bWert;//Wert in Document sichern CPropertyPage::OnOK(); }
genau so kannst du dir das auch machen wenn du das nicht in der Page machen willst sondern wie vorher beschrieben, du mußt dir halt nur eine Stelle suchen wo du die ganzen werte dir merkst, wenn das recht viel ist verpack ich das dann meist in eine eigene klasse (CSetup) die dann das Sichern und Laden der Werte aus irgendeinen File oder Registry oder was weis ich übernimmt. So is das dann alles gekapselt und man muß nicht endlos suchen.
-
Das ist die Erste schritt unten sieht man Doc.h
// Mein Doc header Datei #include "MyPropertyPage3.h" #include "DateiStruktur.h" #include <afxdb.h> class CDenemeStatistikDoc : public CDocument { protected: // Nur aus Serialisierung erzeugen CDenemeStatistikDoc(); DECLARE_DYNCREATE(CDenemeStatistikDoc) // Attribute public: DateiStruktur m_data; CDatabase *m_pDatabase; BOOL bWert; //bWert hab ich in Doc klasse angelegt // DataStruktur m_data;
Jetzt kommt die zweite schritt, das ist mein Page/ Dialog Klasse
/ Eigenschaftenseite CMyPropertyPage3 IMPLEMENT_DYNCREATE(CMyPropertyPage3, CPropertyPage) CMyPropertyPage3::CMyPropertyPage3() : CPropertyPage(CMyPropertyPage3::IDD) { //{{AFX_DATA_INIT(CMyPropertyPage3) m_bDatum = FALSE;// //}}AFX_DATA_INIT m_pDoc = NULL; } CMyPropertyPage3::~CMyPropertyPage3() { } void CMyPropertyPage3::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyPropertyPage3) DDX_Check(pDX, IDC_DATUM, m_bDatum); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMyPropertyPage3, CPropertyPage) //{{AFX_MSG_MAP(CMyPropertyPage3) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten CMyPropertyPage3 BOOL CMyPropertyPage3::OnInitDialog() { // Um die Check box initialisieren zu können // Was muss hier gemacht werden..! Init(); if (m_pDoc == NULL) return FALSE; CPropertyPage::OnInitDialog(); bWert = m_pDoc->bWert; //Variablen einlesen CWnd* pWnd = GetDlgItem(IDOK); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDCANCEL); if (pWnd) pWnd->ShowWindow(SW_HIDE); return TRUE; } void CMyPropertyPage3:: Init() { CFrameWnd* pWnd = (CFrameWnd*)AfxGetMainWnd(); if (pWnd == NULL) return; m_pDoc = (CDenemeStatistikDoc*)pWnd->GetActiveDocument(); } void CMyPropertyPage3::OnOK() { m_pDoc->bWert = bWert;//Wert in Document sichern CPropertyPage::OnOK(); }
und jetzt kommt die dritte schritt wo ich meine Dialog aufrufe
CMyPropertySheet propSheet; propSheet.DocPt2(m_pDoc1); // propSheet.DoModal(); //+-----------------------------------------------------------------------------+ //! Test Anfang ! //+-----------------------------------------------------------------------------+ if(propSheet.DoModal()==IDOK)//propSheet.m_Page3.DoModal()==IDOK { propSheet.m_Page3.bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten } //+-----------------------------------------------------------------------------+ //! Test Ende ! //+-----------------------------------------------------------------------------+
Könntest du mir sagen wo ich hier fehler mache...
Ich mach jetzt dasgleiche was du sagst oder hab ich wieder was vergessen...Ich weiß ich nerve dich aber sorry..Danke im Voraus für die Unterstützung
-
langsam wird man gaga mit deinen Variablen, ersetz mal bitte in der Ini das so
m_bDatum = m_pDoc->bWert; //Variablen einlesen
dasw gleiche dann nur umgekehrt in der OnOK() und die zeile
propSheet.m_Page3.bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten
kannste ersatzlos löschen. Du solltest schon selbst mal sehn das du mit deinen Variablen klar kommst denn wenn du da nicht durch siehst, dann lass es lieber und befass dich noch mal mit den grundlagen, denn du solltest schon selbst durchsehen welche variable wo was macht.
Wir haben jetzt eigentlich nichts weiter gemacht als die Membervariable in der OnInit mit dem Wert aus dem Doc zu setzen und bei OnOK den gesetzten wieder zurück in die Doc zu schreiben wo der dann sicher ist.
Geh noch mal in dich und versuch das zu verstehen was du hier so stumpf abschreibst, denn wenn du das nicht verstehst wirst du beim nächsten problem gleich wieder fragen müssen. was dann wieder die gleiche oder ne ähnliche frage ist.