Deubg Assertion Failure....

V

vollecker

Hallo Ihr Lieben,

habe folgendes Problem:
ich lege mir eine Eigenschaftendialog im Ressourceneditor (MSVC 6.0) an.
Im Klassenassistent werde ich dann gefragt ob ich dazu eine neue Klasse anlegen möchte, logisch tue ich auch (CPropDlg). Wenn ich nun auf irgendeinen Button klicke erzeuge ich eine lokale Variable und zeige den Dialog an (CPropDlg dlg; dlg.doModal() ) - geht auch. Wenn ich nun ein Steuerelement CEdit hinzufügen, diesem mittels Klassenassistent eine membetvariable m_strText zuweise und vor doModal diese membervariable setzte geht auch. ABER: wenn ich z.B. ein CComboBox Feld hinzufüge, diesem eine Controlmembervraible (m_ctrlCombo) zuweise und versuche dort die Methoden aufzurufen nachdem ich die lokale Dialog Variable angelegt habe (z.B.. m_ctrlComo.addString("test") ) bekomme ich immer die Fehlermeldung DEBUG ASSERTION FAILURE File:afxwin2.inl Line: 735 ... wenn ich debugge sehe ich auch, dass es daran liegt, dass mein ctrl kein gültiges Fenster ist, aber warum ? Und vor allem: wenn ich nun im Hauptfenster ein CComboBox anlege und dort über ein Ctrol drauf zugreife geht's. Immer nur wenn ich versuche Controls meines Dialogs aufzurufen - übrigens das slebe Spiel bei CIPAddressCtrl usw...
ach ja, DDX_Control(pDX, IDC_COMBOBOX, m_ctrlCom); ist (natürlich) im Dattenaustausch des Dialogs eingetragen (macht ja ohnehin der Klassenassistent).

irgendwelche Ideen ? Danke im voraus..

Gruß Andreas
 

com

Mitglied
kannste mal den code posten (aufruf und fehlerstelle)
dsa wäre nen bissel hilfreicher :)

versteh ich dich richtig das du nen neuen dialog hast, dort ein dropdown zum beispiel anlegst, und dieses vor dem aufruf füllen willst ?
 
V

vollecker

Hi, da brauche ich nicht viel Code posten..

ich mache einen Dialog mit dem Ressourcen Editor, der beinhaltet ein CComboBox Steuerelement. Dann mahct der Klassenassistent eine neue Klasse daraus. Daraufhin füge ich eine member Variable zu der Combobox hinzu (auch im Klassenassistent). Nun leg ich mir bei Klick auf einen Button eine lokale Instanz des Dialogs an und zeige ihn an, das geht ja, also

CMyDlg dlg;
dlg.doModal();

da ich aber noch den Ihnalt der Combobox ändern will bevor der Dialog angezeigt wird mache ich folgendes

CMyDlg dlg;
dlg.m_ctrlCombo.addString ("hallo");
dgl.doModal();

und genau hier kackt er mit angebebener Fehlermeldung ab. Auf alle anderen member variablen außer controls kann ich aber zugreifen (z.b. m_strEditText)
 

com

Mitglied
Warum das jetzt auftritt kann ich jetzt auchnoch nicht sagen, ich würd nen kleinen Umweg machen (so lange)

Im neuen Dialog Variable anlegen!

CString temp;

Füllst die temp variable mittels

dlg.temp = "Test";

Dann erstellst du im OnInitDialog einfach

m_combo.AddString(temp);

unschön aber ne lösung ;)
 

com

Mitglied
Ahh ok Problem gefunden:

Der "früheste" Zeitpunkt zu dem auf die Combobox zugegriffen werden kann ist in der Funktion OnInitDialog() bzw. DoDataExchange()

Der Grund liegt darin begründet, das die Funktionen AddString etc. nur eine Meldung an das Fenster der Combobox senden. Dazu muß die Combobox aber schon kreiert sein.
 
V

vollecker

ah klappt

Ok, danke für Deine Hilfe jetzt geht's ! Muss halt die Daten, die ich in das Combo Box Element setzen will an den Konstruktor übergeben, aber was soll's...oder hast Du da noch ne andere Idee?

Gruß Andreas
 
Zuletzt bearbeitet von einem Moderator: