Probleme mit numerischem Feld
-
Hallo Leute!
Ich habe ein numerisches Eingabefeld (IDC_prozent), hinter dem ich die DOUBLE Member-Variable m_prozent eingefügt habe.
Nun tritt beim Aufruf von UpdateData(TRUE) ein Fehler auf, dass ich eine Zahl eingeben soll.
Desweiteren erscheint beim Starten des Progs eine 0 im Eingabefeld.Kann ich es irgendwie mit relativ einfachen Mitteln schaffen, dass die Variable den Wert NULL (also einen leeren Wert) erhalten kann und dass keine 0 im Eingabefeld erscheint und keine Fehlermeldung erscheint, wenn das Feld bei UpdataData (TRUE) leer bleibt? Ich will nicht mit String Variablen arbeiten, obwohl ich weiß, dass dies ein Lösungsansatz ist.
tschö!
N.Rico
-
du hast geschrieben das du ein numerisches feld hast (z.b. integer). wenn du so ein feld hast kanns du genau so wenig wie bei einer normalen variable einen leeren string haben. wie schon das wort "string" sagt. du hast eben keinen string. und eine zahl muss immer drin stehen (ausser du löscht sie manuell). wenn du das dialogfeld dann aber aktualisiert, sucht er einen wert. wenn du aber keinen drin stehen hast dannn gibt er halt die meldung aus das du einen wert eintragen sollst.
mein vorschlag:
nimm für dein control lieber einen CString als einen zahlenwert. da lässt du den benutzer alles eingeben was er will. wenn du nun den wert des feldes benutzen willst (egal ob mit EN_CHANGE oder UpdateData(TRUE) o.ä.), dann prüfst du ob gültige werte eingegeben wurden.
erst dann gibst du bei bedarf eine meldung aus
-
Nun ja. Ich weiß ja, dass es mit nem String funktioniert.
Gibt es denn keine Möglichkeit, z.B. mit format oder so, eine double-variable so zu deklarieren, dass es einen leeren wert zulässt?
Oder gibt es irgendwelche ActiveX oder andere Steuerelemente, bei denen man solche Eigenschaften einfügen könnte??
Das wars dann wieder von mir.
Tschö
N.Rico
-
nicht das ich wüßte. man kann halt keinen string in einen zahlentyp "schreiben".
vielleicht ist das eine vernünftige lösung für dich:
- dem control fügst du eine CString variable hinzu z.b. m_sProzentOnInitDialog() { // musst du ja nichts machen, weil dein control mit diesem variablentyp (CString) kein standartwert enthält }OnClose() { BOOL bError = FALSE; UpdateData(TRUE); for (int i = 0; i < m_sProzent.GetLength(); i ++) if ((m_sProzent[i] < '0') || (m_sProzent[i] > '9')) bError = TRUE; if (bError) { // fehlermeldung o.ä. } else { // alles in ordnung double dProzent = (double) atoi(m_sProzent); // ... } }
-
Also wenn schon
double dProzent = atof(m_sProzent);
-
@ Unix-Tom: du hast vollkommen recht !!
@ N.Rico: hör auf tom !!