Gambas France BETA


Pas de compte ? Incription

Faire une contrôle personnel :

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 :