In CEdit nur Zeichen 0-9 und A-F zulassen
-
Hey,
ich möchte in einem CEditControl HexZahlen eingeben. Nun wollte ich dafür sorgen, das auch nur gültige Zeichen eingegeben werden können.
Hier mal mein Ansatz:void CSetting::OnEnChangeHfSendPat() { CString buf; TCHAR tmp; m_cHF_send_pat.GetWindowText(buf); int length = buf.GetLength(); tmp = buf.GetAt(length-1); if(tmp >= 0x30 && tmp <= 0x39 || tmp >= 0x41 && tmp <= 0x46 || tmp >= 0x61 && tmp <= 0x66) { // Zeichen ist gültig } else { // Zeichen ist ungültig buf = buf.Left(length-1); } m_cHF_send_pat.SetWindowTextW(buf); UpdateData(true); }Ich les mir also mein String ein und überprüf das letzte Zeichen, funktioniert soweit auch ganz gut. Das Problem liegt in der Abhandlung von ungültigen Zeichen.
Ich schneide ja einfach das letzte Zeichen ab und ruf dann die "SetWindowTextW()" auf, allerdings interpretiert CEdit das wieder als Änderung und ruft die Funktionvoid CSetting::OnEnChangeHfSendPat()wieder auf und das geht solange bis ich einen Stack overflow bekomme.
Hat jmd ne Idee wie ich die Behandlung von ungültigen Zeichen anderst machen könnte?Vielen Dank im Voraus
-
So hier mal meine Lösung, ist zwar etwas umständlich aber funktioniert.
Wenn jmd ne bessere bzw. kürzere Methode hat, bin für alles dankbar.void CSetting::OnEnChangeHfSendPat() { if(m_cHF_send_pat.GetModify()) { CString buf; TCHAR tmp; m_cHF_send_pat.GetWindowText(buf); int length = buf.GetLength(); if(length > 0) { tmp = buf.GetAt(length-1); if(tmp >= 0x30 && tmp <= 0x39 || tmp >= 0x41 && tmp <= 0x46 || tmp >= 0x61 && tmp <= 0x66) { m_cHF_send_pat.SetModify(true); } else { buf = buf.Left(length-1); m_cHF_send_pat.SetWindowTextW(buf); m_cHF_send_pat.SetModify(false); m_cHF_send_pat.SetSel(m_cHF_send_pat.LineLength(-1),-1,true); } } } UpdateData(true); }
-
am besten
fange "KeyDown" fuer das edit ab und ueberpruefe das zeichen dort schon bevor es in der box gesetzt wird