GÉNÉRATEUR DE RÉPERTOIRES

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 14 mars 2007 à 12:38
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 27 mars 2007 à 12:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41847-generateur-de-repertoires

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 mars 2007 à 12:54
Bonjour,

Un conseil, poste un message quand tu met à jour, sinon on risque de ne rien voir.

Je repart :
- VB.Right(TextDir(i).Text, 1)
équivalent à
TextDir(i).Text.SubString(0,1)
C'est plus framwork

- Un peu de code qui ne sert à rien
Catch ex As Exception
Exit Sub 'Ligne inutile, tu peux la retirer.
End Try
End Sub

- Regarde du coté de IO.Path pour les caractères interdis dans les noms de dossier/fichier.

- # Private Function DirectoryExist(ByRef MyDir As String) As Boolean
est inutile, IO.Directory.Exists fait le même chose.

- Beaucoup de For i = 0 To 19
au lieu de 19 utilise SubDir.Count-1

- Utilise une structure ou un contrôle personnalisé pour
# SubDir(i) # TextDir(i).Text
# Check1(i).CheckState =

public Structure SFrmItem
public SubDir as String
public TextDir as TextBox
public Check as CheckBox
public sub New(byval pSubDir as string,byval pText as TexBox, byval pCheck as CheckBox)
SubDir=pSubDir
TextDir=pText
Check=pCheck
End sub
end structure

Puis au lieu de
# Private SubDir(20) As String
,
private mLstDir as new list(of SFrmItem)

Dans le Load :
mLstDir.add(new SFrmItem("Dir",_TextBox_1, _Check1_1))
mLstDir.add(new SFrmItem("Dir",_TextBox_2, _Check1_2))
...

Comme cela tu sera plus souple (passage de 20 à 15 éléments, 5 lignes à supprimer et c'est tout.

- Met : Option Strict On !!!!!!!!!!!!!!!

- Utilises les 3 ', ''' pour documenter tes méthodes et tes attributs.

Sinon, je note que ton code est plus concis, plus lisible, même s'il peut encore être améliorer.
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 mars 2007 à 12:09
Bonjour,

Que Goto ou On Error soit toujours supporté pas VB.NET2 m'est indiférent, VB offre des méthodes plus simples et plus claires pour les utiliser (Continue, Exit, Return; Try Catch).

Ce n'est pas futile, regarde sur VBFrance les source en .NET en général, tu trouvera tres tres rarement une source avec un GTOT ou On Error.
Utilisateur anonyme
15 mars 2007 à 09:44
Salut en VB2005 utilisation de try catch ... au lieu de GoTo etc.
Sinon l'idée de la source est bonne d'autant plus qu'il y a pas longtemps je me suis tappé une vingtaine de répertoire à créer!
cs_Bitmapking Messages postés 2 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 14 mars 2007
14 mars 2007 à 16:08
Merci pour les remarques.

On Error est toujours supporté par VB2005:
Visual Basic 2005
Dans Visual Basic 2005, vous pouvez appeler des procédures avec l'instruction Call et l'instruction GoSub n'est pas prise en charge. Vous pouvez exécuter plusieurs branchements avec les instructions Select...Case et les constructions On ... GoSub et On ... GoTo ne sont pas prises en charge. Toutefois, Visual Basic 2005 prend encore en charge l'instruction On Error.

C'est bien pratique quand on a un code existant...

OK pour le tableau SubDir, mais je voulais garder la compatibilité avec une structure existante de la base de registres.

Pour le reste, merci des conseils :-)
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 mars 2007 à 12:38
Bonjour,

Dans FormApp.vb, j'ai vu que tu fais plusieurs fois le même code pour la même chose :

Private Sub TextDir_TextChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TextDir1.TextChanged,TextDir2.TextChanged 'à toi de compléter
Dim lTxt as TextBox=directcast(sender,TextBox)
' On Error Resume Next 'PAS DE ON ERROR en VB.NET
try
If Me.IsInitializing = True Then
Return
Else
TmpChar = VB.Right(lTxt.Text, 1)
TextFilter()
lTxt.Text = VB.Left(lTxt.Text, Len(lTXT.Text) - 1) + TmpChar
lTxt.SelectionStart = Len(lTxt.Text)
End If
Catch ex as Exception
End Try
End Sub


A la place de tes SubDir1, SubDir2, ... utilise un tableau : Public SubDir(20)

Ne déclare des variables externe à ta classe (un form est une classe) qui si c'est strictement nécessaire.

Tu peux placer tes textbox dans un tableau pour y accéder plus facilement.

l'API MakeSureDirectoryPathExists est inutile, utilise IO.Directory.* 'regarde la doc

Met Option Strict à On, et transtype avec DirectCast, CType, TryCast

Recode ta foction TextFilter :

Private Function TextFilter() As String
dim lReplace () as string=new string(){",",":","/";"<",">","*",".","+","-","?","!","%"}
For Each lStr as String in lReplace
TmpChar = Replace(TmpChar, lStr, "")
Next
Return TmpChar
End Function

Ta fonction DirectoryExist est inutile : IO.Directory.Exists

PAS DE GOTO DANS UNE APPLICATION VB.NET ni VB6 d'ailleur
Utilise Exit, Continue, Return à la place

Bon c'est déjà pas mal (mais pas fini, j'ai mon train à prendre), rebosse tout ça et reposte le tout.
Rejoignez-nous