2016-09-07 5 views
0

Ich habe eine MFC-Anwendung, die eine Klasse haben, die CTabCtrl erbt, auf meiner Main Dialog :: OnInit() Methode, die ich mache.Steuert die Handhabung in einem CTabCtrl MFC

tabCtrl.InsertItem(0, _T("Tab 1")); 
tabCtrl.InsertItem(1, _T("Tab 2")); 
tabCtrl.InitDialogs(); 

tabCtrl.ActivateTabDialogs(); 
tabCtrl.ShowWindow(SW_SHOW); 

tabCtrl eine Variable aus einer Klasse ist, die aus CTabCtrl erbt, wird die Methode InitDialogs:

m_Dialog[0]->Create(m_DialogID[0], this); 
m_Dialog[1]->Create(m_DialogID[1], this); 
m_Dialog[0]->ShowWindow(SW_SHOW); 

m_Dialog * ist sowohl Dialogklasse enthält, die ich von der Ressourcenklasse gezogen.

Ich sehe die beiden Laschen, wie ich es gezogen wird, wenn ich das Programm laufen, aber wenn ich etwas tun, wie

UpdateData(TRUE); 
valueTest = "tEST"; 
UpdateData(FALSE); 

ich eine Behauptung Fehler fehlschlagen. Mein DoDataExchange wird genannt, und es sieht so aus:

void ConfigDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_EDIT1, valueTest); 
} 

Ich habe mit diesem für Tage strugling, und ich nur in der Lage gewesen Beispiele mit Dummy-Tabs zu finden, die keine Kontrollen in sie haben. Gibt es einen Schritt, den ich vermisse?

Update: Die Behauptung Fehler Dieser

Microsoft Visual C++ Runtime Library --------------------------- Debug-Assertion fehlgeschlagen! Programm: C: \ Windows \ SYSTEM32 \ mfc140d.dll Datei: f: \ dd \ vctools \ vc7libs \ Versand \ atlmfc \ src \ mfc \ wincore.cpp Zeile: 4355 Für Informationen darüber, wie Ihr Programm einen Assertionsfehler verursachen kann sehen, die Visual C++ Dokumentation behauptet

Und es nicht zu Updatedata (TRUE) Satz

+0

Was ist Ihr aktuelles Problem ist? Dass Sie eine Bestätigung sehen, scheitern? –

+0

Mein Problem ist, dass ich die Eigenschaften der Steuerelemente nicht ändern kann, wenn ich es versuche, bekomme ich einen Assert-Fehler. –

+2

Bitte posten Sie die ** genaue ** Fehlermeldung des Assertion-Dialogs. Sie können den Text mit [Strg] + C kopieren. Ein Screenshot kann helfen, aber das ist nicht unbedingt erforderlich. – IInspectable

Antwort

0

ich gehe davon aus, es ist ein edit-Steuerelement, da es die Identifikation von IDC_EDIT1 hat. Das ASSERT wird gegeben, weil Sie kein Fenster mit der ID von IDC_EDIT1 als untergeordnetes Fenster von ConfigDialog haben. Ist es ein Kind eines der Tab-Steuerelemente? Die DDX_ * -Makros funktionieren nur für untergeordnete Fenster Ihrer Dialogklasse.

Wenn Sie ein Kind Fenster einiger Reiter, versuchen Sie so etwas wie:

tabCtrl.SetDlgItemText(IDC_EDIT1, valueTest); 

es abzurufen,

tabCtrl.GetDlgItemTText(IDC_EDIT1, valueTest); 
+0

Ich habe dies versucht, ConfigDialog ist eine der ChildDialog des mainDialog, aber ich bin mir nicht sicher, ob ich verstehe, was Sie sagen –

+0

Sie versuchen, Text zu erhalten und die Kontrolle zu bearbeiten. Ist das Steuerelement ein Kind des Dialogfelds oder ist es ein Kind des Tabs? Rufen Sie vor dem Aufrufen von DoModal außerdem UpdateData() auf? Sie müssen DoModal aufrufen, bevor Sie UpdateData aufrufen können. –

+0

Das Bearbeitungssteuerelement ist ein untergeordnetes Element der Registerkarte. Muss ich DoModal im Hauptdialog o im Registerdialogfeld aufrufen? –