IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

TreeView et classe


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut TreeView et classe
    bonjour a tout le monde
    comment allez vous ?

    dans ma form principale (form1) j'ai un bouton qui ouvre une autre form
    (form2) seulement quand je ferme cette form2 avec se code me.close() pour revenir a form1 tout plante ma form1 plante et ne réponde plus, et si je ferme ma form2 avec se code me.hide() sa ne plante pas mais je ne veut pas la cacher je veut fermer ma form2
    sa a fait sa quand j'ai rajouter une classe pour que je voit mon disque dans la treeview qui se trouve donc dans la form2
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       Private c As ListerRepertoire
     
        Private Sub FTP_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            c = New ListerRepertoire(TreeView1) 'instancie la classe
            c.ListerMesRepertoire("C:\", Nothing) 'liste le répertoire
     
        End Sub
    et voici le code de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Imports System.IO
     
    Public Class ListerRepertoire
        Private TheTreeview As TreeView
        Private Delegate Function TN_Delegate(ByVal a As TreeNode) As Int32
     
        Public Sub New(ByVal TV As TreeView)
            TheTreeview = TV 'affecte la Treeview
        End Sub
     
        Public Sub ListerMesRepertoire(ByVal Rep As String, ByVal Parent As TreeNode)
            Try
                'Récupère la liste des entrées du répertoire
                Dim Liste As String() = Directory.GetFileSystemEntries(Rep)
                Dim Entree As String
     
                For Each Entree In Liste 'Pour chaque entrée de la liste
                    Dim TmpName As String = Microsoft.VisualBasic.Mid(Entree, Len(Rep) + 1) 'On découpe proprement le nom du fichier ou répertoire
                    TmpName = Microsoft.VisualBasic.Replace(TmpName, "\", "") 'On enlève les caractères parasites !
     
                    If File.Exists(Entree) Then     'Si c'est un fichier
                        AddNode(TmpName, True, Parent)  'On crée un élément fichier dans le treeview
                    Else    'Si  c'est un répertoire
                        Dim TmpNode As TreeNode 'Var tempo pour sauver le noeud du treeview
                        TmpNode = AddNode(TmpName, False, Parent) 'On ajoute le rep dans le treeview
                        ListerMesRepertoire(Entree, TmpNode) 'On liste le contenus de ce répertoire
                    End If
                Next Entree
            Catch Ex As System.UnauthorizedAccessException 'si le répertoire est protégé
                Exit Sub
            Catch e As Exception 'en cas d'erreurs
                MsgBox("Erreur : " & e.Message, MsgBoxStyle.Critical)
            End Try
        End Sub
        Private Function AddNode(ByVal StrNom As String, ByVal BlFile As Boolean, ByVal Parent As TreeNode) As TreeNode
            Try
                Dim TmpNode As TreeNode      'Noeud Pour les manipulations dans la function
     
                If Not Parent Is Nothing Then ' Si Parent n'est pas à nothing
                    'TmpNode = Parent.Nodes.Add(Str_Nom) 'On crée un élément fils
                    Dim no As New TreeNode
                    no.Text = StrNom
                    With TheTreeview
                        .Invoke(New TN_Delegate(AddressOf Parent.Nodes.Add), New Object() {no})
                    End With
                    TmpNode = no
                Else ' Si Parent Est à nothing c sans doute le premier élément du treeview ou une racine
                    'TmpNode = TreeView1.Nodes.Add(Str_Nom)
                    Dim no As New TreeNode
                    no.Text = StrNom
                    With TheTreeview
                        .Invoke(New TN_Delegate(AddressOf TheTreeview.Nodes.Add), New Object() {no})
                    End With
                    TmpNode = no
                End If
     
                Application.DoEvents()  'histoire de faire beau ^^ Non je pense que ca limitera le risque d'erreur
                Return TmpNode
            Catch ex As Exception
                Return Nothing
                MsgBox(ex.ToString)
            End Try
        End Function
    End Class
    ps: normalement sa affiche mon disque C dans ma treeview mais quelque fois il m'affiche tout les dossier et quelque fois la moitié je comprend pas pourquoi

    merci d'avance,

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    bonjour,


    je pense que l’opération de lister les dossiers de ton C: demande plus de temps et plus de ressource .
    essai de faire ça a un thread en parallèle. ce qui faire que ton interface ne va pas plante
    essai le BackgroundWorker ou tu peut utilise un simple thread.

  3. #3
    Invité
    Invité(e)
    Par défaut
    j'ai trouvé sa pour faire une nouvelle Thread http://dotnet.developpez.com/faq/asp...s#thread_start
    donc en 1er je doit faire sa dans ma classe et pas dans la form ?

    mais le problème c'est que je n'arrive pas a placer se code
    je me trouve avec plusieurs private sub et donc sa fait des erreurs

    et si je comprend bien je doit remplacer public class blablabla par public class Thread
    Dernière modification par Invité ; 21/10/2010 à 14h25.

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour ,

    tu peut créer et lance le thread dans ton Form2_Load .

    mais attention si tu passe en multithread tu doit faire attention au crossthread

    ten fait pas, ce problème ne fait pas peur .

    commence par déclarer et lance ton thread qui va mettre à jour votre Treeview

  5. #5
    Invité
    Invité(e)
    Par défaut
    voici le code de ma form2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Imports System
    Imports System.IO
    Imports System.Windows.Forms
    Imports System.Threading
     
    Public Class FTP
     
        Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
            Me.Close()
        End Sub
     
    End Class
     
    Public Class Threads
        Inherits System.Windows.Forms.Form
        Private _threadCalculs1 As Thread
        Private c As ListerRepertoire
     
        Private Sub Threads_loads()
            c = New ListerRepertoire(FTP.TreeView1) 'instancie la classe
            c.ListerMesRepertoire("C:\", Nothing) 'liste le répertoire
     
        End Sub
        Private Sub StartThread()
            threadCalculs1 = New Thread(New ThreadStart(Threads_loads))
            threadCalculs1.Start()
        End Sub
    End Class
    il me souligne les 2 threadCalculs1 et me dit qu'il n'est pas déclarer
    et il me souligne threads_loads et dit
    Erreur 2 Le délégué 'System.Threading.ThreadStart' requiert une expression 'AddressOf' ou une expression lambda en tant qu'unique argument de son constructeur.
    Dernière modification par Deepin ; 21/10/2010 à 14h55. Motif: Balises [QUOTE]...[/QUOTE]

  6. #6
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour,

    essai de suivre cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class Form1
        Dim thread As Threading.Thread
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            thread = New Threading.Thread(AddressOf StartScanDrive)
            thread.Start();
        End Sub
        Private Sub StartScanDrive()
            c = New ListerRepertoire(FTP.TreeView1) 'instancie la classe
            c.ListerMesRepertoire("C:\", Nothing) 'liste le répertoire
        End Sub
    End Class

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  3. [C#] TreeView : affichage des classes -> MetaViewer
    Par kerbage dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/05/2006, 13h19
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo