Présenter les nombres avec un format lisible :
Objectif :
Les contrôles tels que les valueBox permettent la saisie et le contrôle de la saisie de nombres dans des champs mais ne permettent pas d'afficher un format lisible facilement, surtout sur les grands nombres. Pour contourner le problème, il suffit d'ajouter aux TextBox, deux propriétés, Value et Format pour atteindre notre objectif.
Nous allons donc, créer un contrôle qui hérite des propriétés de TextBox avec nos deux propriétés, en plus.
Voir,
un exemple d'application , de la forge
Déclaration de l'héritage du TextBox et de nos deux propriétés :
1
2
3
4
5
6
7
8
9
10
11
| ' Gambas class file
INHERITS TextBox '<---------------------------------------' tbxPerso hérite de textBox EXPORT
PRIVATE $obs AS Observer ''Notre Observer PRIVATE $bFocus AS BOOLEAN ''Boolean du focus
'<---------------------------------------------------------' définition de nos deux propriétés nécessaires selon le raccourci de déclaration PROPERTY Value AS FLOAT USE $value ''Valeur float de la textBox PROPERTY Format AS STRING USE $format ''Format de la textBox
|
Création d'un observer pour suivre les évènements :
1
2
3
4
5
6
| PUBLIC SUB _new() '<---------------------------------------' initialisation
$obs = NEW Observer(ME) AS "obs" '<---------------------' les évènements sont récupérés par obs $format = "$###,###.00" '<------------------------------' initialisation du format à obtenir
END
|
L'évènement _Change permet de contrôler la saisie :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| PUBLIC SUB obs_Change() ''Contrôle de la saisie
IF ME.text THEN '<------------------------------------' si le tbxPerso est alimenté
IF NOT IsFloat(ME.Text) THEN '<---------------------' il n'est accepté que des Float ME.Text = "0" '<---------------------------------' affichage d'un zéro pour marquer le rejet MSons.son("beep") '<------------------------------' son pour marquer le rejet RETURN '<-----------------------------------------' l'affichage se fait mais n'est pas validé ENDIF
$value = Val(ME.Text) '<---------------------------' la propriété est validée ELSE $value = 0 ENDIF
END
|
L'évènement _LostFocus permet de récupérer la valeur numérique avec notre format d'affichage :
1
2
3
4
5
6
7
8
9
10
11
12
13
| PUBLIC SUB obs_Lostfocus() ''Le format ne sera appliqué qu'après
IF ME.Text THEN '<------------------------------------' si on a un texte $value = Val(Format($value, "#.############")) '<---' on récupère la valeur sans format Object.Lock(ME) '<---------------------------------' pour désactiver obs_Change() ME.Text = Format($value, $format) '<---------------' la valeur est formatée Object.Unlock(ME) '<---------------------------------' pour réactiver obs_Change() $bFocus = NOT $bFocus '<---------------------------' bascule boolean ELSE ME.Clear ENDIF
END
|
L'évènement _GotFocus vérifie si on a une valeur et affiche sans format :
1
2
3
4
5
6
7
8
9
10
| PUBLIC SUB obs_Gotfocus() ''Pour être certain d'avoir à la fois une valeur et un texte
IF $value = 0 THEN '<---------------------------------' si on n'a pas de valeur ME.Clear ELSE '<------------------------------------------------' si on a une valeur ME.Text = Format($value, "#.############") '<------' on récupère la valeur sans format $bFocus = NOT $bFocus '<---------------------------' bascule boolean ENDIF
END
|
L'évènement _Activate permet la bascule du focus :
1
2
3
4
5
6
7
8
9
10
| PUBLIC SUB obs_Activate() ''L'utilisateur tape sur entrée et bascule l'affichage
SELECT CASE $bFocus '<---------------------------------' en fonction de la bascule boolean CASE TRUE obs_Lostfocus() CASE FALSE obs_Gotfocus() END SELECT
END
|
Dans l'IDE :
Ce contrôle, que j'ai nommé, ici, tbxPerso, sera présent dans la liste (de l'IDE) de mes contrôles utilisables dès que j'aurais compilé mon projet, et sera utilisable comme un autre contrôle dans mon projet.
Ici, c'est l'icône représentée par une tête d'oiseau dans l'image suivante.
Objectif atteint :
Je voulais présenter les grands nombres dans un champ de saisie avec un format lisible :
La saisie ( _GotFocus ) :
L'affichage ( _LostFocus ) :
====================
Navigation :
<-- Liens du Wiki : <--<-- Accueil du WIKI : <-- ====================
La Documentation :