Problem mit Eingabefeld

Hallo,

ich habe in einer SDI ANwendung folgendes Problem mit einem Eingabefeld:
Wenn ich eine Zahl eingegeben habe und anschließend mit BackSpace alle Zeichen lösche erhalte ich einen "Debug Assertion Faild".

Kann mir jemand sagen, wie ich diesen Fehler wegbekomme?

King of Drums
 
In den Debugger gehen und an der Stelle, wo das ASSERT steht, die Kommentare lesen. Das ist vermutlich ein MFC-eigener Assert, bei dem irgendwelche Grenzen geprüft werden (hast du ein int mit dem Eingabefeld verknüpft?)
 
Ja, ich habe ein int mit dem Eingabefeld verknüpft. Ich bin auch in den Debugger gegangen und haben mir den Assert angeguckt. Hier ein Auszug der Assertstelle:
C++:
3102:     ASSERT(hWndOldLockout != m_hWnd);   // must not recurse
5F431597   mov         ecx,dword ptr [this]
5F43159A   mov         edx,dword ptr [hWndOldLockout]
5F43159D   cmp         edx,dword ptr [ecx+20h]
5F4315A0   jne         CWnd::UpdateData+93h (5f4315b6)
5F4315A2   push        0C1Eh
5F4315A7   push        offset THIS_FILE (5f4cccf0)
5F4315AC   call        AfxAssertFailedLine (5f476bb0)
5F4315B1   test        eax,eax
5F4315B3   je          CWnd::UpdateData+93h (5f4315b6)
5F4315B5   int         3 //Hier war der Assert makiert
5F4315B6   xor         eax,eax
5F4315B8   test        eax,eax
5F4315BA   jne         CWnd::UpdateData+74h (5f431597)
Ich kann da nichts mit anfangen. Aber vielleicht einer von Euch.
 
Oh, du hast den MFC-Sourcecode nicht mit installiert? Mit dem Assert kann ich direkt nichts anfangen, vom Kommentar hinten dran klingt das, als würde da irgendetwas rekursiv aufgerufen.

Hab das Assert gefunden, in CWnd::UpdateData. Wo genau rufst du das UpdateData auf? Du scheinst das innerhalb einer Routine aufzurufen, die ebenfalls aufgrund eines UpdateData-Aufrufes aufgerufen wurde. Damit kommt MFC nicht klar.

Ich lasse in meinen MFC-Projekten immer die Finger von UpdateData. Ich hole mir einfach den String mit GetWindowText und wandle alles selber um. UpdateData hat den Riesen-Nachteil, das es immer alle Controls eines Dialogs bearbeitet.
 
Hallo,

also ich rufe UpdateData in einer OnChange Funktion auf. Ich habe das auch gerade einmal mit GetWindowText probiert. Dabei habe ich nur wieder folgendes Problem.

In meiner Anwendung läuft eine Uhr. Und wenn ich GetWindowText benutze wird meine Eingabe in dem EditFeld jede Sekunde mit einer "0" wieder überschrieben. Nutze ich jedoch UpdateData, dann funktioniert das einwandfrei.

In der OnChange Funktion lese ich einen Wert ein und gebe diesen sofort wieder in einem Feld aus. Weiterhin nutze ich diesen Wert zum berechnen einiger Werte.

Ich habe nun auch alle UpdateData(TRUE) bis auf das in der OnChange Funktion herausgeschmissen. Weiterhin habe ich noch ein UpdateData(FALSE) in einer Timerfunktion (nicht der Uhrtimer). Aber der Fehler tritt immer noch auf.
 
Es geht natürlich noch die umgekehrte Alternative. Statt beim Lesen auf GetWindowText zu setzen, beim Schreiben auf SetWindowText und dessen UpdateData rauszuwerfen.

Generell ist einfach der Aufruf von UpdateData innerhalb einer OnChange-Funktion das Problem.
 

Neue Beiträge

Zurück