UpdateData verheddert sich in Timer-Funktion
-
Hallo!
Ich habe einen Timer, der mir kontinuierlich ein paar Editboxen aktualisiert.
void CTabMainDlg::OnTimer(UINT nIDEvent) { UpdateData(TRUE); if( nIDEvent == TIMER_NUMBER ) { m_EditBox = rand(); } UpdateData(FALSE); CDialog::OnTimer(nIDEvent); }Ich brauche hier ein UpdateData(TRUE) vorher, damit man in andere Editboxen reintippen kann (die würden sonst gelöscht).
Danach mache ich UpdateData(FALSE), um die neuen Daten anzuzeigen.Gebe ich in einer anderen Editbox einen zu großen Wert ein, so kommt der Meckerdialog ("Wert von ...bis...") und es knallt
sobald in OnTimer UpdateData(TRUE) aufgerufen wird. Klar, da jetzt der User erstmal gültige Daten eingeben müßte, bevor alle Daten wieder gültig sind.Aber wie kann ich das vermeiden?
Danke,
Stimpy
-
mit was für werten arbeitest du denn? Wäre gut zu wissen. AUch den Zeit des Timers wäre interessant.
-
Meine Werte sind int und double, die alle halbe Sekunde eingetragen werden, was aber kaum eine Rolle spielen sollte.
Das Gemecker ist ja erwünscht, da so eine falsche Benutzereingabe abgefangen wird.
Nur dürfen sich Meckerdialog und Timer-Funktion nicht überlagern, sonst sind ungültige Werte am Start...
-
da hast du denn ein problem. Der Meckerdialog kommt ja aus dem inneren und überlagert immer (soweit ich weiß) alle anderen Prozesse, weil es ne Warnung der Fehlermeldung ist.
Wenn du das Programm, bzw. den Timer startest, klappt soweit ich das jetzt aus deinen infos lesen konnte alles ganz gut (?).
Das Problem tritt dann auf, wenn der User den Wert änert und nichts drin steht (?).
-
Ich empfehle Dir: Lass das mit "UpdateData" sein und mach für das Control eine Member-Variable, welche Du dann mittels GetWindowText/SetWindowText ansprichst.
Da sparst Du Dir viel unnötige Zeit und es wird auch noch wesentlich einfacher und überschaubarer...
-
Genau, sowas war mir nicht eingefallen! Danke!
