problème test de la zone d'édition , c++ builder
bonjour à tous , comme je l'ai dis hier ,je débute avec c++ builder , et j'ai essayé pour commencer avec l'aide d'un tuto de faire un petit convertisseur Euro-Dinar , en prenant 1 e = 135 Da , bref , l'applic fait la bonne conversion , mais quand j'efface la valeur tapé, je me retrouve avec une erreur et je pense que c'est à cause du StrToFloat mais je n'en suis pas sûr , voila le bout de code qui traite ce problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DecimalSeparator='.';
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ZoneKeyPress(TObject *Sender, char &Key)
{
if ((Key < 48 || Key > 57)
&& Key != VK_BACK
&& Key != VK_DELETE
&& Key != DecimalSeparator)
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DinarZoneChange(TObject *Sender)
{
double valeur = 0 ;
try {
// l'exception sera déclancher si le contenue de la zone est vide
valeur = StrToFloat(DinarZone->Text) ;
}
catch (...)
{
// On ne fait rien, c'est le but recherché
}
valeur /= 135;
// On supprime la gestion de l'événement OnChange pour la
// zone d'édition cible
EuroZone->OnChange = 0;
EuroZone->Text = EuroZone->Text.FloatToStrF(valeur, AnsiString::sffFixed, 15, 2);
// On restaure la gestion de l'événement OnChange
EuroZone->OnChange = EuroZoneChange;
} |
la video de mon pb :
[ame]http://www.youtube.com/watch?v=0AK3P39DyLA[/ame],
merci pour vos suggestions et remarques ...
j'ai essayé mais sans succès !
j'essay d'arranger avec votre proposition en ajoutant la ligne suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
&& (DinarZone->Text.Length()!=0 || EuroZone->Text.Length() !=0)
// le résultat :
void __fastcall TForm1::ZoneKeyPress(TObject *Sender, char &Key)
{
if
(
(Key < 48 || Key > 57)
&& Key != VK_BACK
&& Key != VK_DELETE
&& Key != DecimalSeparator
&& (DinarZone->Text.Length()!=0 || EuroZone->Text.Length() !=0)
)
Key = 0;
} |
mais j'ai tjr la meme erreur , est-je bien fais ??
c'est bon , c'est réglé !!!
merci bcp , le problème vient d’être réglé ,
il fallait justement ajouté la condition mais dans try
Code:
1 2 3 4 5
|
if ( EuroZone->Text.Length() > 0 )
valeur = StrToFloat(EuroZone->Text);
else
valeur = 0; |
merci encore