DÉVELOPPEMENT RAPIDE D'APPLICATIONS




Notes de cours 8

Textes et Dates



Manipuler les "strings"

Il est souvent nécessaire quand on saisie des données ou qu'on valide des informations,
de pouvoir manipuler les chaînes de caractères de différentes façons. Voyons quelques fonctions utiles pour exécuter ces manipulations:

Len(chaine): retourne la longueur - nombre de caractères dans la chaine.

Left(chaine, nombre): retourne le nombre de caractères spécifié à partir de la gauche de chaine.

Right(chaine, nombre): retourne le nombre de caractères à partir de la droite de la chaine.

Mid(chaine, position, nombre): retourne le nombre de caractères spécifié à partir de position dans la chaine.

InStr(chaine1, chaine2): retourne la position dans la chaine1 où chaine2 commence - retourne 0 si chaine2 pas trouvée

LTrim(chaine), RTrim(chaine) et Trim(chaine): retourne la chaine avec les espaces non-significatifs enlevés, à gauche, à droite ou les deux.

LCase(chaine), UCase(chaine): LCase retourne la chaine toute en minuscules (lower case) et UCase retourne toutes des majuscules (upper case).




Format(chaine, format): retourne la chaine formattée selon le format spécifié; les caractères de formattage utilisés pour les données numériques sont:

0 représente un chiffre, avec les zéros non-significatifs
# représente un chiffre, sans les zéros non-significatifs
. pour la position du décimal
, pour les groupes de milliers
+ - ( ) espace affichés littéralement


Par exemple:
Format(3456.7, "00000.00") --> 03456.70
Format(3456.7, "#####.##") --> 3456.7
Format(003456.75899, "##,##0.00") --> 3,456.76
Format(456.7, "##,##0.00$") --> 456.70$



Pour les données de type date ou heure on utilise les caractères suivants:
yy --> l'année sans le centennaire - eg: 98
yyyy --> l'année avec centennaire - eg: 1998
m --> le mois numérique - eg: 10
mmm --> le mois abbrévié - eg: oct
mmmm --> le nom du mois au long - eg: octobre
d --> le jour du mois, sans zéro - eg: 8
dd --> le jour du mois, avec zéro - eg: 08
dddd --> le nom du jour de la semaine - eg: lundi
h --> l'heure, sans zéro - eg: 7
hh --> l'heure avec zéro - eg: 07
mm --> minutes - eg: 45
ss --> secondes - eg: 50


Blocs de texte


Il est souvent utile dans une application de pouvoir travailler avec des blocs de texte. Les contrôles TextBox et ComboBox possèdent des propriétés qui permettent de manipuler les blocs de texte. Il s'agit de:
SelStart: entier long qui identifie le début du bloc - 0 signifie le début du texte et un nombre égal à la longueur signifie tout le texte
SelLength: un entier long qui identifie le nombre de caractères à sélectionner
SelText: un string qui contient les caractères sélectionnés

Par exemple, le code suivant sélectionne tout le texte dans un TextBox:
TextBox1.Focus()
TextBox1.SelectionStart = 0
TextBox1.SelectionLength = Len(TextBox1.Text)
'
' Si je veux remplacer le texte choisi
' j'assigne une nouvelle valeur à SelectedText
'
TextBox1.SelectedText = "Nouvelle valeur"





Le Console Application

Un Console app est une fenetre DOS dans laquelle on peut exécuter des commandes VB

On doit créer une Solution et un Project de type 'Console application'.

Le Console app est un Module.








Les 2 dernières lignes sont importantes car autrement, le Module termine et ferme avant qu'on aie le temps de voir le résultat.

On se sert d'un Console app quand on veut tester la syntaxe sans avoir à rédiger un Form.



Le menu d'édition de texte
      Private Sub Edit_Cut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _
 		Handles Edit_Cut.Click
         ' Ensure that text is currently selected in the text box.   
         If TextBox1.SelectedText <> "" Then
             ' Cut the selected text in the control and paste it into the Clipboard.
             TextBox1.Cut()
         End If
     End Sub
      Private Sub Edit_Copy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _
 		Handles Edit_Copy.Click
         ' Ensure that text is selected in the text box.   
         If TextBox1.SelectionLength > 0 Then
             ' Copy the selected text to the Clipboard.
             TextBox1.Copy()
         End If
     End Sub
      Private Sub Edit_Paste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _
 		Handles Edit_Paste.Click
         ' Determine if there is any text in the Clipboard to paste into the text box.
         If Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) = True Then
             ' Determine if any text is selected in the text box.
             If TextBox1.SelectionLength > 0 Then
                 ' Ask user if they want to paste over currently selected text.
                 If MessageBox.Show("Do you want to paste over current selection?", _
                    "Cut Example", MessageBoxButtons.YesNo) = DialogResult.No Then
                     ' Move selection to the point after the current selection and paste.
                     TextBox1.SelectionStart =  _
 				TextBox1.SelectionStart + _
                        	TextBox1.SelectionLength
                 End If
             End If
             ' Paste current text in Clipboard into text box.
             TextBox1.Paste()
         End If
     End Sub

      Private Sub Edit_Undo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _
 		Handles Edit_Undo.Click
         ' Determine if last operation can be undone in text box.   
         If TextBox1.CanUndo = True Then
             ' Undo the last operation.
             TextBox1.Undo()
             ' Clear the undo buffer to prevent last action from being redone.
             TextBox1.ClearUndo()
         End If
     End Sub
  



Le code dans l'exemple fonctionne pour TextBox1 seulement.

Pour le faire fonctionner pour n'importe quel TextBox dans le Form, on peut changer toutes les références à TextBox1 à ceci:

               Ctype(ActiveControl, TextBox)




Les Events

Le Click event n'est pas le seul utilisable pour un objet.

Par exemple: on veut vider le TextBox en entrant dedans parce qu'on affiche un message de formattage:

 	     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 				 Handles MyBase.Load
         txtDate.Text = "aaaa-mm-jj"
     End Sub
      Private Sub txtDate_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs)  _
 				Handles txtDate.GotFocus, txtDate.Click
         txtDate.SelectionStart = 0
         txtDate.SelectionLength = Len(txtDate.Text)
     End Sub

 
L'énoncé Handles est un event handler. Il sert à identifier les events que le code du module peut traiter.

Pour utiliser le même code pour plusieurs events, on change le event handler.

 	     Private Sub btnEffacer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                 Handles btnEffacer.Click, mnuEfface.Click
          EffaceTout()
     End Sub
 









Créer une fonction


Je crée une fonction Entrer( ) comme l'exemple précédent pour faire la sélection du texte en entrant dans le TextBox:

   Private Sub txtNom_Click(ByVal sender As Object, ByVal e As System.EventArgs)  _
 		Handles txtNom.Click, txtNom.GotFocus, txtAchats.Click,  _
 		txtAchats.GotFocus, txtVille.Click, txtVille.GotFocus
         entrer1()
     End Sub
      Private Sub entrer1()
         CType(ActiveControl, TextBox).SelectionStart = 0
         CType(ActiveControl, TextBox).SelectionLength = Len(CType(ActiveControl, TextBox).Text)
     End Sub



Créer un Module


Le module est un programme. Le module ne contient que du code - il n'a pas d'interface visuel (form, etc).

Un module est appellé par les autres objets du Project. Le code dans le module est disponible à tous les forms si on l'identifie comme Public.

 Module Module1
     Public Sub Entrer(ByVal sender As Object)
         sender.SelectionStart = 0
         sender.SelectionLength = Len(sender.Text)

     End Sub
 End Module
 



Calculs avec les dates


Dates and Times Summary

Get the current date or time Now, Today, TimeOfDay
Perform date calculations DateAdd, DateDiff, DatePart
Return a date DateSerial, DateValue, MonthName, WeekDayName
Return a time TimeSerial, TimeValue
Set the date or time DateString, TimeOfDay, TimeString, Today
Time a process Timer



Pour accéder à cette référence, cliquez : Date and Time Summary


Fonction pour calculer l'âge


Public Function CalcAge(ByVal daten As Date) As Long
     Dim lngAge As Long

     If Not IsDate(daten) Or daten > Now Then
          daten = Now()
     End If

     lngAge = DateDiff(DateInterval.Year, daten, Now)

      If DateSerial(Year(Now), Month(daten), Microsoft.VisualBasic.DateAndTime.Day(daten)) > Now Then
           lngAge = lngAge - 1
     End If

     CalcAge = lngAge

End Function