Ciao a tutti, ho una casella di testo CEdit che dovrebbe contenere un intero compreso tra 0 e 99. Ho creato due variabili, una di controllo (CEdit) e una per il valore di tipo intero. Ho poi creato una gestione dell'evento killfocus con il seguente codice:
codice:
void CModify_Oem::OnEnKillfocusEditSetupFileNumber()
{
tmp_i = m_filenumber_value;
this->UpdateData(TRUE);
if((m_filenumber.GetWindowTextLength() == 0) || (m_filenumber_value < SETUP_FILENUMBER_MIN) || (m_filenumber_value > SETUP_FILENUMBER_MAX))
{
CString s1, s2, error;
s1.LoadString(IDS_THE_RANGE_MUST_BE_BETW);
s2.LoadString(IDS_AND);
error.Format("%s %hd %s %hd", s1, SETUP_FILENUMBER_MIN, s2, SETUP_FILENUMBER_MAX);
::AfxMessageBox(error, MB_ICONSTOP);
m_filenumber_value = tmp_i;
m_filenumber.SetFocus();
}
this->UpdateData(FALSE);
}
Se inserisco un numero esterno al range, mi viene correttamente visualizzato il messaggio di errore e viene ripristinato il valore precedente.
Il mio problema è il seguente, se non immetto nessun numero, mi si apre un popup con il seguente messaggio: "Immettere un valore integer", questo popup mi viene visualizzato due volte, poi appare il mio messaggio di errore per due volte e alla fine di ciò mi viene ripristinato il valore precedente.
Perchè si comporta in questo modo? Io vorrei solo che apparisse il mio messaggio, sia nel caso il numero inserito sia fuori dal range, sia nel caso non abbia inserito nessun numero.
Questa cosa pere funzionare se la variabile valore è di tipo CString invece che intera.
Grazie.