double Wert in Eingabefelder / Dialogfelder schreiben
-
Hallo,
ich möchte in einzelne Eingabefelder double-Werte schreiben. Kenne leider nur die Befehle SetDlgItemInt, SetDlgItemText und UpdateData. Die Suche habe ich schon bemüht, es werden aber keine brauchbaren Ergebnisse angezeigt. Muss ich die double-Werte erst in Strings konvertieren und dann eintragen? Das wäre sehr lästig, da es mehrere Felder sind und die meisten auch wieder ausgelesen werden müssen und wieder als double weiter verarbeitet werden.
Danke für eure Hilfe.
-
Wenn du UpdateData benutzt, dann ist das nicht nötig.
Lege dir einfach eine Variable des entsprechenden Typs zu dem Editfeld an.
Mit UpdateData(true) geht nun der Editfeld-Inhalt in die Variable, mit UpdateData(false) geht der Variableninhalt in das Editfeld.
Anlegen tust die Variable im Ressourceneditor. Rechtsklick auf das Editfeld und dann Variable hinzufügen.
Ansonsten kannst du auch beim CString mit Format Zahlen in Text umwandeln.
-
erstell im klassenassi membervariablen für die Eingabefelder.
den typ der variable legst du mit double fest.danach sollte es mit dem zuweisen einer kommazahl (2.01) klappen
m_dEdit1 = 2.01;mit SetDlgItemInt wirst du nie doublewerte angezeigt bekommen, da die MSDN folgendes dazu sagt.
BOOL SetDlgItemInt(int nID, UINT uValue,// hier willst du double in unsigned int wandeln BOOL bSigned );
und der double wert wirt dir verkürzt, alles was nach dem punkt kommt wird abgeschnitten.
LowFly
-
Mit UpdataData(FALSE) werden, aber doch alle Eingabefelder aktualisiert? Kann man nicht ein bestimmtes Feld ansprechen und es mit einem double-Wert füllen?
Wie kann man eigentlich die angezeigten Stellen des double-Wertes im Eingabefeld begrenzen?
-
mach es über SetDlgItemText,
schreib dir ne extra funktion an die du die doublewerte übergibst und dir diese in einen String wandelt & umgekehrt, diese kannst du via SetDlgItemText bzw GetDlgItemText anzeigen & auslesen.oder du must halt darauf achten das nur an das eine specielle Editfeld ein neuer wert übergeben wird.
ne andere idee wäre noch die Editfelder in ne double array zu fassen
double m_dEdit[10];
& weist dann jedem Editfeld einen bestimmten platz in der Array zu
DDX_Text(pDX, IDC_EDIT1, m_double[0]);
...
m_double[0] = 1.01;
UpdateData(FALSE);werden zwar alle adnere editfelder mit aktualisiert aber sie behalten den alten wert.
-
Gelegenheitsprogrammierer schrieb:
Wie kann man eigentlich die angezeigten Stellen des double-Wertes im Eingabefeld begrenzen?
also wenn du dem eingabefeld eine double-variable zuweist, wird das nicht zu begrenzen gehen.
wenn du es als textfeld machst, kannst du damitCString tmp; double dVar = 1.234556; tmp.Format("%.3f", dVar); // 3 nachkomma-stellen
formatieren. den wert dann nur noch zuweisen wie es LowFly gesagt hat (SetDlgItemText)
-
Mit UpdataData(FALSE) werden, aber doch alle Eingabefelder aktualisiert? Kann man nicht ein bestimmtes Feld ansprechen und es mit einem double-Wert füllen?
Mann kann!. Du kannst statt UpdateData(...) auch einen einzelnen Wert holen/ zurückschreiben:
double m_doublevariable CDataExchange exchange(this,FALSE);//bzw. TRUE DDX_Text(&exchange,IDC_EDITFELD,m_doublevariable);
Wie kann man eigentlich die angezeigten Stellen des double-Wertes im Eingabefeld begrenzen?
Begrenzung der Anzeige eines double kenne ich auch nur über den „Umweg“ mit CString.
Ich habe bisher höchstens mal:
1. den Wertebereich begrenzt im DoDataExchange-Block:DDV_MinMaxDouble(pDX, m_doublevariable, 10, 999999);
2. Anzahl aller Zeichen (inclusive Komma) begrenzt :
//im DoDataExchange: DDX_Control(pDX, IDC_ EDITFELD, m_ editcontrol); //im InitDialog m_ editcontrol ->LimitText(anzahl_zeichen);
Für den Rest hilft wohl nur Handarbeit z.B. im EnChange(...)
Tester2