cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 29 janv. 2010 à 16:16
Merci à tout les 2 pour vos commentaires très constructifs.
Pour la ligne:
If (File.GetAttributes(Cheminfichier) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then, j'ai pris l'exemple dans :
http://msdn.microsoft.com/en-us/library/system.io.file.setattributes.aspx. Je vais donc essayer de suivre vos précieux conseils pour améliorer ce programme.
@+
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 29 janv. 2010 à 13:55
Pas de grosses erreurs mais à l'ouverture du projet, oulala çà fait un peu peur ce gros bloc de code... pense à aérer un peu.
Sinon à la lecture de ton code :
1) Un fois que tu crée : "Dim a As New FolderBrowserDialog"
Pense à liberé l'objet avec a.Dispose, ou alors utilise un bloc Using :
Using a As New FolderBrowserDialog
[code]
End Using
Et utilise une variable explicite, "a" etant peu parlant
Idem pour tes controles "CheckBox1, ...CheckBox3.. etc"
2) Alors çà ... promets moi de ne plus jamais le faire (on oubli VB6) :
'Réglage du temps
For i = 1 To 100000
Next i
Utilise plutot "Thread.Sleep()"
De plus ta progressBar ne sert pas à grand chose, vu qu'elle ne reflete en rien l'occupation de ton appli
3) Pour les clés de registre, pourquoi utiliser l'API Win32, utilise la Class Registry (Microsoft.Win32)
4) Cette operation me parait un peu suspecte ?
If (File.GetAttributes(Cheminfichier) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then
5) Pour ton tri de ListView, je te conseille de faire une classe a part
Genre :
Public Class ListViewColumnSorter Implements IComparer
Avec des attributs de classe propres
Public ColumnToSort As Integer
Public OrderOfSort As SortOrder
Public ObjectCompare As CaseInsensitiveComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
[... ]
End Function
Ensuite dans ta form1 tu peux faire :
Dans le constructeur de la Form1 : Private lvwColumnSorter As ListViewColumnSorter
Private Sub ListView1_ColumnClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
If (e.Column = lvwColumnSorter.SortColumn) Then
If (lvwColumnSorter.Order = SortOrder.Ascending) Then
lvwColumnSorter.Order = SortOrder.Descending
Else
lvwColumnSorter.Order = SortOrder.Ascending
End If
Else
lvwColumnSorter.SortColumn = e.Column
lvwColumnSorter.Order = SortOrder.Ascending
End If
CType(sender, ListView).Sort()
End Sub
6) Attention à çà : Lbl_source.Text & "" & fichier.Text
Si on se trouve dans la racine (ex : C:) celà te donnera "C:" & "" & fichier.Text --> C:\\nomfichier.ext
7) Fini le VB6 : MsgBox("Affichage Fichiers cachés débloqué")
On fait du .net maintenant : MessageBox.Show("Message", "Titre", MessageBoxButtons.OK, MessageBoxIcon.Information, )
8) Ici "Dim MyKey As Object"
MyKey est visiblement une chaine, donc 'Dim MyKey As String'
9) La aussi tu as un tableau à 1 dimension : ListeFichier.GetUpperBound(0)
donc ne t'embete pas : ListeFichier.Length
10) Là aussi : Dim cmpt As Int32
ne t'embete pas avec la taille de l'int : Dim cmpt As Integer
11) Je ne suis pas sur mais tu peux, au lieu de : ShellExecute(Handle.ToInt32, "Open", File, Parametres, My.Application.Info.DirectoryPath, 1)
faire : Process.Start(File)
12) Tu fais comme tu veux, mais ce genre de chose :
.Columns.Add("Nom", 120, HorizontalAlignment.Left) 'titre, dimension colonne,alignement texte
.Columns.Add("Taille", 50, HorizontalAlignment.Right)
.Columns.Add("Date création", 120, HorizontalAlignment.Center)
.Columns.Add("Dernière modification", 120, HorizontalAlignment.Center)
.Columns.Add("Dernier accès", 120, HorizontalAlignment.Center)
vu que çà ne bouge pas, je le fais directement sur le composant à la création (via la PropertyGrid de VS)
Bon je vais arreter là pour le moment, car je n'ai plus trop le temps, et je pense qu'avec çà tu as encore pas mal de boulot pour améliorer ta source.
Mais sinon à part çà j'ai quand meme constaté qu'il y avait des choses pas trop mal, et felicitation pour le travail fournis.J
Et je le repete : je ne te dis pas tout çà pour te descendre mais afin que tu puisse t'améliorer !
Bon code.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 29 janv. 2010 à 13:35
salut,
WshShell = CreateObject("Wscript.Shell")
on atteint des sommets là, du VBS dans du DOTNET...
le framework a prévu des méthodes, faut s'en servir :)
29 janv. 2010 à 16:16
Pour la ligne:
If (File.GetAttributes(Cheminfichier) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then, j'ai pris l'exemple dans :
http://msdn.microsoft.com/en-us/library/system.io.file.setattributes.aspx.
Je vais donc essayer de suivre vos précieux conseils pour améliorer ce programme.
@+
29 janv. 2010 à 13:55
Sinon à la lecture de ton code :
1) Un fois que tu crée : "Dim a As New FolderBrowserDialog"
Pense à liberé l'objet avec a.Dispose, ou alors utilise un bloc Using :
Using a As New FolderBrowserDialog
[code]
End Using
Et utilise une variable explicite, "a" etant peu parlant
Idem pour tes controles "CheckBox1, ...CheckBox3.. etc"
2) Alors çà ... promets moi de ne plus jamais le faire (on oubli VB6) :
'Réglage du temps
For i = 1 To 100000
Next i
Utilise plutot "Thread.Sleep()"
De plus ta progressBar ne sert pas à grand chose, vu qu'elle ne reflete en rien l'occupation de ton appli
3) Pour les clés de registre, pourquoi utiliser l'API Win32, utilise la Class Registry (Microsoft.Win32)
4) Cette operation me parait un peu suspecte ?
If (File.GetAttributes(Cheminfichier) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then
5) Pour ton tri de ListView, je te conseille de faire une classe a part
Genre :
Public Class ListViewColumnSorter Implements IComparer
Avec des attributs de classe propres
Public ColumnToSort As Integer
Public OrderOfSort As SortOrder
Public ObjectCompare As CaseInsensitiveComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
[... ]
End Function
Ensuite dans ta form1 tu peux faire :
Dans le constructeur de la Form1 : Private lvwColumnSorter As ListViewColumnSorter
Private Sub ListView1_ColumnClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
If (e.Column = lvwColumnSorter.SortColumn) Then
If (lvwColumnSorter.Order = SortOrder.Ascending) Then
lvwColumnSorter.Order = SortOrder.Descending
Else
lvwColumnSorter.Order = SortOrder.Ascending
End If
Else
lvwColumnSorter.SortColumn = e.Column
lvwColumnSorter.Order = SortOrder.Ascending
End If
CType(sender, ListView).Sort()
End Sub
6) Attention à çà : Lbl_source.Text & "" & fichier.Text
Si on se trouve dans la racine (ex : C:) celà te donnera "C:" & "" & fichier.Text --> C:\\nomfichier.ext
7) Fini le VB6 : MsgBox("Affichage Fichiers cachés débloqué")
On fait du .net maintenant : MessageBox.Show("Message", "Titre", MessageBoxButtons.OK, MessageBoxIcon.Information, )
8) Ici "Dim MyKey As Object"
MyKey est visiblement une chaine, donc 'Dim MyKey As String'
9) La aussi tu as un tableau à 1 dimension : ListeFichier.GetUpperBound(0)
donc ne t'embete pas : ListeFichier.Length
10) Là aussi : Dim cmpt As Int32
ne t'embete pas avec la taille de l'int : Dim cmpt As Integer
11) Je ne suis pas sur mais tu peux, au lieu de : ShellExecute(Handle.ToInt32, "Open", File, Parametres, My.Application.Info.DirectoryPath, 1)
faire : Process.Start(File)
12) Tu fais comme tu veux, mais ce genre de chose :
.Columns.Add("Nom", 120, HorizontalAlignment.Left) 'titre, dimension colonne,alignement texte
.Columns.Add("Taille", 50, HorizontalAlignment.Right)
.Columns.Add("Date création", 120, HorizontalAlignment.Center)
.Columns.Add("Dernière modification", 120, HorizontalAlignment.Center)
.Columns.Add("Dernier accès", 120, HorizontalAlignment.Center)
vu que çà ne bouge pas, je le fais directement sur le composant à la création (via la PropertyGrid de VS)
Bon je vais arreter là pour le moment, car je n'ai plus trop le temps, et je pense qu'avec çà tu as encore pas mal de boulot pour améliorer ta source.
Mais sinon à part çà j'ai quand meme constaté qu'il y avait des choses pas trop mal, et felicitation pour le travail fournis.J
Et je le repete : je ne te dis pas tout çà pour te descendre mais afin que tu puisse t'améliorer !
Bon code.
29 janv. 2010 à 13:35
WshShell = CreateObject("Wscript.Shell")
on atteint des sommets là, du VBS dans du DOTNET...
le framework a prévu des méthodes, faut s'en servir :)
http://msdn.microsoft.com/fr-fr/library/microsoft.win32%28VS.80%29.aspx
++