Nachkommastellen eines CEdit
-
Ich einem Dialog habe ich mehrere Edit-Felder. Der Dialog wird aus einer Ressource geladen. In den Edit-Feldern sollen nun float-Werte manipuliert werden. Ich möchte nun, dass immer zwei Nachkommastellen angezeigt werden. Wenn die Eingabe bereits Nachkommastellen hat, so ist das ja kein Problem. Wenn die Zahl aber auf ,00 endet, so wird diese nur als ganze Zahl angezeigt. Da ein Editfeld ja immer als Text angesehen wird, so müsste man den Inhalt des Anzeigestrings manipulieren (z.B. in der DoDataExchange). Oder gibts da noch andere Möglichkeiten?
-
CAMSCurrencyEdit
CAMSMaskedEdit
sind Teile einer Klassensammlung, die du auf www.codeproject.com findest.
-
Vielen Dank, diese Klasse hab ich auch gefunden. Allerdings ist mein Problem das der Dialog schon fertig ist. Um diese Klasse zu verwenden muss ich ja alles nochmal neu erstellen...
-
Nein, musst du nicht!
Binde für einfach die gewünschten Controls eine Controlvariable ein (CEdit) und integriere die AMS Klassen in dein Projekt.
Dann geh in den Header, ersetze CEdit durch CAMSCurrencyEdit, denk an den include und guck was passiert.
PS: Wenn du unsicher bist, mach vorher eine Kopie deines Projekts.
-
Ok, wer lesen kann ist klar im Vorteil. Steht ja unter dem Abschnitt Usage. Jetzt wird das auch richtig angezeigt.
Ich sichere die Inhalte in einer Ini-Datei. Jetzt werden aber durch diese neue Klasse die Nachkommastellen abgeschnitten. Gebe ich 50,23 ein, so wird nur 50 abgespeichert.
Dann hab ich es nochmal mit der Klasse CAMSNumericEdit versucht. Die verhält sich wie ein normales Editfeld, obwohl ja per default 4 Nachkommastellen angezeigt werden müssten.
-
Hmm, komisch.
Bei mir geht es. Wie sieht dein Code dafür aus?Und denk dran: Hier ist es 5,34 - beim Programmieren zu 99% 5.34!
Ich arbeite oft mit CString Variablen auch wenns um Zahlen geht, damit ich noch schnell ein Replace drüberjagen kann.
-
estartu schrieb:
Hmm, komisch.
Bei mir geht es. Wie sieht dein Code dafür aus?Und denk dran: Hier ist es 5,34 - beim Programmieren zu 99% 5.34!
Ich arbeite oft mit CString Variablen auch wenns um Zahlen geht, damit ich noch schnell ein Replace drüberjagen kann.
Das mit dem Komma ist mir klar. Ich hab noch eine Membervariable vom Typ Double, die mit dem Editfeld verknüft ist.
void CKalibrierungWMA::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_RADIUS_KLEIN, m_CtrlZylklein); DDX_Text(pDX, IDC_RADIUS_KLEIN, m_dRadZyl1); DDX_Control(pDX, IDC_RADIUS_GROSS, m_CtrlZylgross); DDX_Text(pDX, IDC_RADIUS_GROSS, m_dRadZyl2); }Da passiert der Datenaustausch. Könnte es sein, dass man das so nicht mehr machen kann?
-
AndyDD schrieb:
Da passiert der Datenaustausch. Könnte es sein, dass man das so nicht mehr machen kann?
Ich fürchte ja, denn die Umwandlung hält das Komma für ein ungültiges Zeichen und hört da auf umzuwandeln.
Schau mal mit dem Debugger rein, ich vermute es geht dort schon verloren.
Mach mal probehalber eine CString-Variable und wandle dann mit Replace und atof um.
So sieht das bei mir aus:CString strPreis = m_lscLeistungen.GetItemText(i, 2); // Das kann bei dir per CString Member und UpdateData passieren. strPreis.Replace(",", "."); flPreis += atof(strPreis);
-
So wirds sein. Aber da kann ich auch gänzlich auf diese Klasse verzichten. Hab das jetzt so gelöst:
void CKalibrierungWMA::DoDataExchange(CDataExchange* pDX) { CString Rad1String, Rad2String; CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_RADIUS_KLEIN, m_CtrlZylklein); DDX_Text(pDX, IDC_RADIUS_KLEIN, m_dRadZyl1); m_CtrlZylklein.GetWindowText(Rad1String); Rad1String.Format("%.2f",(double)atof(Rad1String)); m_CtrlZylklein.SetWindowText(Rad1String); DDX_Control(pDX, IDC_RADIUS_GROSS, m_CtrlZylgross); DDX_Text(pDX, IDC_RADIUS_GROSS, m_dRadZyl2); m_CtrlZylklein.GetWindowText(Rad2String); Rad2String.Format("%.2f",(double)atof(Rad2String)); m_CtrlZylklein.SetWindowText(Rad2String); }Funktioniert auch...