GÉNÉRATEUR DE RÉPERTOIRES

Signaler
Messages postés
14757
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
-
Messages postés
14757
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
-
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

Messages postés
14757
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
151
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.
Messages postés
14757
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
151
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.
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
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!
Messages postés
2
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
14 mars 2007

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 :-)
Messages postés
14757
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
151
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.