|
Site |
Cours VB.net |
|
|
|
Afficher, CultureInfo. |
|
|
A- Remarque sur le rafraîchissement de l'affichage.
B- Comment afficher du texte , du numérique suivant le format désiré ?
C- Comment utiliser les 'CultureInfo'
A - Remarque sur la mise à jour de l'affichage:
La mise à jour de l'affichage d'un Label (comme les autres contrôles d'ailleurs) est effectuée en fin de Sub:
Si on écrit:
Dim
i As Integer For i = 0 To 100Label1.Text = i.ToString
Next i
La variable i prend les valeurs 1 à 100, mais à l'affichage rien ne se passe pendant la boucle, VB affiche uniquement 100 à la fin; si on désire voir les chiffres défiler avec affichage de 0 puis 1 puis 2... il faut rafraîchir l'affichage à chaque boucle avec la méthode Refresh():
Dim
i As Integer For i = 0 To 100Label1.Text = i.ToString: Label1.Refresh()
Next i
Une alternative est de mettre un Application.DoEvents() qui donne à Windows le temps de traiter les messages et de rafraîchir l'affichage.
B - Afficher du text:
On a vu que pour afficher du texte il fallait l'affecter à la propriété 'Text' d'un label ou d'un textBox (ou pour des tests l'afficher sur la fenêtre 'console').
Pas de problème pour afficher des chaînes de caractères, par contre, pour les valeurs numériques, il faut d'abord les transformer en 'String' et les formater (définir les séparateurs, le nombre de décimales...) .
ToString
On a déjà vu que pour afficher une variable numérique, il fallait la transformer en 'string' de la manière suivant:
MyDouble.ToString
Mais ToString peut être surchargé par un paramètre appelé chaîne de format. Cette chaîne de format peut être standard ou personnalisée.
Cette chaîne est de la forme 'Axx' ou A donne le type de format et xx le nombre de chiffre après la virgule. Le format est défini par la 'culture' en cours sur le thread courant.
Imports System
Imports System.Globalization
Imports System.Threading
Module Module1
Sub Main()
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")'changement
de culture
Dim UnDouble As Double = 123456789
Console.WriteLine("Cet exemple est en-US culture:")
Console.WriteLine(UnDouble.ToString("C")) 'format
monétaire (C) affiche $123,456,789.00
Console.WriteLine(UnDouble.ToString("E")) 'format
scientifique (E) affiche 1.234568E+008
Console.WriteLine(UnDouble.ToString("P")) 'format %
(P) affiche
12,345,678,900.00%
Console.WriteLine(UnDouble.ToString("N")) 'format
nombre (N) affiche
123,456,789.00
Console.WriteLine(UnDouble.ToString("F")) 'format
virgule fixe (F) affiche 123456789.00
End Sub
End Module
Autre exemple:
S=(1.2).ToString("C") retourne en CurrentCulture Français (par défaut sur mon ordinateur):1,2€
Il existe aussi D pour décimal, G pour général X pour
hexadécimal.
On peut créer de toute pièce un format, on utilise pour cela les caractères suivants:
0 indique une espace réservé de 0
Chaque '0' est réservé à un chiffre. Affiche un chiffre ou un zéro. Si le nombre contient moins de chiffres que de zéros, affiche des zéros non significatifs. Si le nombre contient davantage de chiffres à droite du séparateur décimal qu'il n'y a de zéros à droite du séparateur décimal dans l'expression de format, arrondit le nombre à autant de positions décimales qu'il y a de zéros. Si le nombre contient davantage de chiffres à gauche du séparateur décimal qu'il n'y a de zéros à gauche du séparateur décimal dans l'expression de format, affiche les chiffres supplémentaires sans modification.
# indique un espace réservé de chiffre.
Chaque '#' est réservé à un chiffre. Affiche un chiffre ou rien. Affiche un chiffre si l'expression a un chiffre dans la position où le caractère # apparaît dans la chaîne de format ; sinon, n'affiche rien dans cette position.
Ce symbole fonctionne comme l'espace réservé au 0, sauf que les zéros non significatifs et à droite ne s'affichent pas si le nombre contient moins de chiffres qu'il n'y a de caractères # de part et d'autre du séparateur décimal dans l'expression de format.
. (point) indique l'emplacement du séparateur décimal (celui affiché sera celui du pays )
Vous devriez donc utiliser le point comme espace réservé à la décimale, même si vos paramètres régionaux utilisent la virgule à cette fin. La chaîne mise en forme apparaîtra dans le format correct pour les paramètres régionaux.
, (virgule) indique l'emplacement du séparateur de millier.
Séparateur de milliers. Il sépare les milliers des centaines dans un nombre de quatre chiffres ou plus à gauche du séparateur décimal.
"Littéral" la chaîne sera affichée telle quelle.
% affichera en pour cent.
Multiplie l'expression par 100. Le caractère du pourcentage (%) est inséré
E0 affiche en notation scientifique.
: et / sont séparateur d'heure et de date.
; est le séparateur de section : on peut donner 3 formats (un pour les positifs, un pour les négatifs, un pour zéro) séparés par ;
Exemple:
Chaîne de format '0000', le chiffre 145 cela affiche '0145'
Chaîne de format '####', le chiffre 145 cela affiche '145'
Chaîne de format '000.00', le chiffre 45.2 cela affiche '045.20'
Chaîne de format '#,#', le chiffre 12345678 cela affiche '12,345,678'
Chaîne de format '#,,' le chiffre 12345678 cela affiche '12'
La chaîne de formatage' #,##0.00 ' veut dire obligatoirement 2 chiffres après le séparateur décimal et un avant:
Si on affiche avec ce format
1.1 cela donne 1,10
.5 cela donne 0,50
4563 cela donne 4 563,00
Exemple:
Dim N As Double =
19.95
Dim MyString As String = N.ToString("$#,##0.00;($#,##0.00);Zero")
' En page U.S. English culture, MyString ="$19.95".
' En page Française , MyString ="19,95€".
Exemple 2:
Dim UnEntier As Integer = 42
MyString = UnEntier.ToString( "Mon nombre " + ControlChars.Lf + "= #" )
Affiche:
Mon nombre
= 42
Str() de Microsoft.VisualBasic est toujours accepté
Il permet de transformer une variable numérique et String, qui peut ensuite être affichée.
MyString=Str( LeNombre)
Label1.Text=MyString
Pas de formatage..
String.Format du Framework
Permet de combiner des informations littérales à afficher sans modification et des zones formatées.
Les arguments de String.Format se décomposent en 2 parties séparées d'une virgule.
Chaîne de formatage entre guillemets: Exemple "{0} + {1} = {2}": les numéros indiquent l'ordre des valeurs.
Valeurs à afficher dans l'ordre, la première étant d'indice zéro. Exemple= A, B, A+B
Exemple:
Si A=3 et B=5
MsgBox(String.Format("{0} + {1} = {2}",A, B, A+B)) affiche 3+5=8
Autre exemple:
Dim MonNom As String = "Phil"
String.Format("Nom = {0}, heure = {hh}", MonNom, DateTime.Now)
Le texte fixe est "Nom
=" et ", heure =
", les éléments de format sont « {0} » et « {hh} »
et la liste de valeurs est
MonNom et
DateTime.Now.
Cela affiche: Nom = Phil Heure= 10
Là aussi on peut utiliser les formats:
MsgBox(String.Format("{0:C}",-456.45)) Affiche -456,45€
MsgBox(String.Format("{0:D8}", 456)) Affiche 00000456 Décimal 8 chiffres
MsgBox(String.Format("{0:P}", 0.14)) Affiche 14% Pourcent
MsgBox(String.Format("{0:X}", 65535)) Affiche FFFF Hexadécimal
MsgBox(String.Format("{0:##,##0.00}", 6553.23))
La fonction Format de Microsoft.VisualBasic (pas la classe String.Format) fournit des fonctions similaires mais les arguments sont dans l'ordre inverse (valeur, chaîne de formatage) et il n'y a pas de numéro d'ordre et de{}!! C'est pratique pour afficher une seule valeur.
MyStr = Format(5459.4, "##,##0.00") '
Returns
"5,459.40".
MyStr = Format(334.9, "###0.00") '
Returns "334.90".
MyStr = Format(5, "0.00%") ' Returns "500.00%".
C - CultureInfo
On se rend compte que l'affichage est dépendant de la CurrentCulture du Thread en cours.
Exemple:
Si la CurrentCulture est la 'CultureInfo Us' et que j'affiche avec le format 'C' (monétaire) cela affiche un $ avant, si je suis en 'CurrentCulture Français' cela affiche un € après.
Par défaut la CultureInfo est celle définie dans Windows, probablement 'fr-FR' sur votre ordinateur .
On peut modifier la CurrentCulture par code (voir exemple plus haut).
Imports
System.ThreadingThread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("en-us")'passage en culture US culture
En VB
, on peut utiliser
l'objet My.
MsgBox(My.Application.Culture.ToString)
'affiche 'fr-FR'(My.Application.ChangeCulture 'permettra de changer la culture )
En français par défaut:
Le séparateur de décimal numérique est le '.'
Exemple : 1.20
Le séparateur décimal monétaire est la ','
Exemple : 1,20€
|
|
|
|
|