Le premier site francophone dédié au développement Pocket PC

Calpin, votre premier programme en VB.NET (partie 2)
Auteur
Stéphane Sibué
Date 10 décembre 2002
 
   


Partie 1
Partie 2
Partie 3
Partie 4

Continuons ensemble cette visite du code de Calpin. Dans la partie précédent nous avons ajouté du code pour quitter l'application, et créer un nouveau document vierge.

Choisir un fichier

Avant de charger un fichier dans notre calpin il faut le choisir. Pour cela nous avons besoin d'une boîte de dialogue d'ouverture de fichier. C'est le contrôle "OpenFileDialog" qui permet cela.

Dans Calpin j'ai appelé ce contrôle "OpenDialog". J'ai aussi créé une fonction qui met en oeuvre ce contrôle et qui retourne le fichier choisi. Voici son code :

Private Function ChoisirFichier() As String                


Dim wFichier As String Dim wRetval As DialogResult
 With OpenDialog
  .Filter = "Fichiers texte|*.txt|Fichiers HTML|*.htm|Tous les fichiers|*.*"
  wRetval = .ShowDialog()
 End With

 If wRetval = DialogResult.OK Then
  Return OpenDialog.FileName
 Else
  Return ""
 End If
End Function

Ce code est très simple. La première opération consiste à lister les types de fichiers que l'on veut charger. Pour Calpin le filtre est placé pour les fichiers "*.txt", "*.html" et aussi pour tous les fichiers "*.*"

Il suffit ensuite d'utiliser la méthode "ShowDialog" du contrôle "OpenFileDialog". Cette méthode affiche le dialogue standard d'ouverture de fichier. Attention, le fonctionnement standard de votre Pocket PC implique que vous ne pouvez lister que les fichiers du dossier "\My Documents" et ses sous dossiers. Pour le moment on va s'en contenter.

Pendant l'affichage de la boite de dialogue de chargement de fichier, l'utilisateur peut faire 2 choses, choisir un fichier ou annuler l'opération. La méthode "ShowDialog" retourne le choix de l'utilisateur (sous la forme d'une énumération de type "DialogResult"). Si le retour est "DialogResult.OK" un fichier a été choisi et il est possible de récupérer son nom avec la méthode "Filename".

Charger le fichier choisi

Puisque nous avons notre fonction qui permet très simplement de choisir un fichier nous pouvons maintenant charger le fichier choisi et l'afficher dans notre zone de saisie.

Private Sub ChargerFichier(ByVal wFichier As String)              


 Dim file As System.IO.StreamReader
 Dim words As String
Cursor.Current = Cursors.WaitCursor()
Try file = New System.IO.StreamReader(wFichier) Catch ex As Exception MsgBox("Impossible d'ouvrir le fichier." & vbCrLf & vbCrLf & _ "Description:" & ex.Message, MsgBoxStyle.Information, "Calpin") Finally Try words = file.ReadToEnd() Catch ex As Exception MsgBox("Impossible de lire le contenu du fichier." & _ vbCrLf & vbCrLf & "Description: " & _ ex.Message, MsgBoxStyle.Information, "Calpin") Finally file.Close() TXT_Texte.Text = words FichierEnCours = wFichier SB_Calpin.Text = RessortirNomFichier(FichierEnCours) End Try End Try
 Cursor.Current = Cursors.Default
End Sub

Cette fonction est un peu plus complexe que la précédente, mais vous allez voir, rien de bien compliqué tout de même.

Pour charger le fichier nous utilisons un objet de type "System.IO.StreamReader" qui s'occupera du chargement des infos. Les infos chargées seront placées dans la variable "words" de type "String".

Suivant la taille du fichier à charger il peut se passer plus ou moins de temps. Pour faire patienter l'utilisateur il est bien d'utiliser le sablier de votre Pocket PC. Pour faire apparaître le sablier il suffit d'utiliser cette instruction :

Cursor.Current = Cursors.WaitCursor()

Et pour le faire disparaître :

Cursor.Current = Cursors.Default

Try... Catch... Finaly

Avec VB.NET la gestion des erreurs a bien changé par rapport à VB. Il faut oublier l'ancienne gestion à base de ON ERROR... et de RESUME. La nouvelle manière de faire est bien plus... puissante, oui c'est le mot qui convient.

La nouvelle méthode met en oeuvre une structure composée de 3 parties. Le principe est simple. Il consiste à placer en premier le code qui risque de poser un problème, puis en second le code à effectuer en cas d'erreur, pour finir le code à exécuter quoi qu'il arrive :

Try
  Rem On place ici le code protégé à exécuter
  Rem Il peut être sur plusieurs lignes
Catch exp as Exception
  Rem On place le code qui doit être exécuté 
  Rem En cas d'erreur 
  Rem exp est un objet qui donne des renseignements
  Rem Sur le problème (l'exception en jargon .NET)
Finaly
  Rem On place le code qui doit 
  Rem Etre exécuté de toute manière
En Try

Le chargement d'un fichier texte

La première étape consiste à créer un objet de type "System.IO.StreamReader". L'un des constructeurs de cet objet permet lors de sa création de charger imédiatement le fichier donné en paramètre :

file = New System.IO.StreamReader(wFichier)

Rappel : "wFichier" est le paramètre de notre fonction "ChargerFichier".

Si cette ligne de code ne retourne pas d'erreur, l'objet est créé (la variable "file" pointe sur cet objet) et le fichier est ouvert. A ce stade, il ne reste plus qu'à charger le contenu du fichier dans une chaine avec cette ligne de code :

words = file.ReadToEnd()

Si tout c'est bien passé, la variable "words" (de type "String") contient maintenant toutes les données du fichier. Vous avez sans doute remarqué l'imbrication de 2 stuctures "Try ... End Try" permettant de sécuriser l'ouverture du fichier et aussi de sécuriser la lecture de son contenu.

file.Close()
TXT_Texte.Text = words
FichierEnCours = wFichier

Au final, il suffit de fermer le fichier "file.Close()", de placer son contenu dans la zone d'édition "TXT_Texte.Text = words" et de mémoriser le fichier en cours "FichierEnCours = wFichier".

Et la fonction "RessortirNomFichier" alors ?

Cette petite fonction place une chaine dans le contrôle "StatusBar" placé en bas de l'écran et qui est chargé d'afficher le nom du fichier en cours. Si le nom est trop long (avec le chemin ça peut être long) il faut n'afficher que les n derniers caractères, ce que retourne notre fonction "RessortirNomFichier" dont voici le code :

Private Function RessortirNomFichier(ByVal wFichier As String) As String
If Len(wFichier) > 25 Then wFichier = "..." & Mid(wFichier, Len(wFichier) - 22) End If Return wFichier

End Function

Ce code est très simple, si la chaine passée en paramètre est de taille > à 25 caractères la fonction retourne les caractères placé après le 22ème sinon elle retourne la chaine sans modification. Il y a bien sûr moyen de rendre cette fonction bien plus efficace (le code en place est très... bourin).

Charger un fichier quand on en fait la demande par le menu

Nous avons maintenant toutes les pièces pour effectuer le chargement de notre fichier. Il suffit maintenant de placer le code final en réponse à l'événement "Click" du menu "Charger" :

Conclusion de cette seconde partie

Les choses avancent, nous savons maintenant charger un fichier avec la classe "System.IO.StreamReader" (trop facile), choisir un fichier depuis le dossier standard "\My Documents" grâce au control "OpenFileDialog", et aussi sécuriser notre code avec la puissante structure de gestion d'erreur "Try... Catch... Finaly... End Try". On a bien travaillé vous ne trouvez pas ?

Dans la 3ème partie nous allons enregistrer notre zone d'édition et aussi, pour la fonction "Enregistrer sous..." utiliser le dialogue standard d'enregistrement de fichier.

N'oubliez pas qu'en cas de problème, ou si vous avez des questions, le forum .NET de CodePPC est à votre disposition.

Stéphane Sibué

 

 
   

Copyright 2001-2004 - Tous droits réservés
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.