Maitrisez votre préparation <br> maximiser votre chance
Page d acceuil Acceuil
Bienvenue sur votre bureau MetaComputer
Page d acceuil Mes licences
Acquerir un logiciel ou un service MetaComputer
Page d acceuil Gestion commerciale :
Devis, commandes, stock...
connexion à modabbir bureau
Se retrouver dans un véritable marché
Page d acceuil Hassib (comptabilite generale) :
Saisir, importer votre balance..
Sortir vos etats fiscaux,
Envoyer votre declaration via internet
Page d acceuil Adae : Gestion de paye.. :
Gestion de personnels,
elaborer bulletins de paye
effectuer la declaration de CNSS
Page d acceuil Meta Clouds = MetaUSB.. :
Votre espace de stockage offert par
MetaComputer. c'eat aussi lié à vos base de données,
si vous travaillez avec une application MetaComputer
Page d acceuil Al Morakib
pour surveiller et controler par cameras
ma maison, mon lieu de travail, mes depots...
Page d acceuil Mes PCs :pour surveiller et controler
mes ordinateurs, ceux de mes enfants
et meme les pcs du lieu de travail
Page d acceuil Service Meta GPS :
Reperer vos vehicules
Suivre et controler a distance
tous vos vehicules..
Page d acceuil Meta FAX
Envoyer des FAX sans ligne
et sans apareil
Decoller...
Page d acceuil Emailer
Envoyer à des Miliers
des e-mails de prospection
Page d acceuil Service MetaSMS :
Envoyer et gerer vos SMS
Faire des compagnes publicitaires
Avec des résultats sures et optimaux
Page d acceuil Meta-eEntreprise :
Votre entreprise sur le net..
Lancer, suivre une action commerciale
Page d acceuil Meta-eFormation :
Des supports de formation tres adaptés
à votre développement personnel,
A une activité professionnelle de pointe...
Page d acceuil jeux :
jeux pour les enfants
aussi pour les grands
Super-Logiciels pour vous
Al Morakib
Logiciel de serveillance par camera et par internet ...
ALYASSIR
Gestion simple et performante :
- Facturation
- BLs
- Devis
- Commandes
- Reglements
- Clients et fournisseurs
Al Fondoki
Logiciel de la gestion hôteliere:
Réservations, main courante, poits de vente, dépôts, occupation des chambres, ...
Morakib PC
Plus
Projets pour vous
Net sou9 / e-souk
NetFavoris 
NOUS |  contacter-nous
Avenue des F.A.R. Rsidence Niama N6 - Ttouan (Maroc)
Tl :(+212) 8 90 60 52 25
Fax :(+212) 5 39 97 25 15
Mobile :(+212) 6 61 10 74 37
Email :mce@meta-computer.com
 

Acceuil  vb.net(508)  VB dot NET et TreeView
VB dot NET et TreeView 2011-02-07

Comment charger l'arborescence de son disque dur dans un TreeView ?
------------------------------------------------------------------------------------------
Ce code permet de charger l'arborescence du disque dur C: dans un TreeView de la même façon que l'Explorateur Windows. Ce code nécessite un controle TreeView nommé TV et un Button nommé BTN.

Imports System
Imports System.IO
Imports System.Windows.Forms

'...

Private Sub Explorer(ByVal node As TreeNode)
Try
Dim s As String
node.Nodes.Clear()
For Each s In Directory.GetDirectories(node.FullPath)
node.Nodes.Add(Path.GetFileName(s))
Next
Catch
End Try
End Sub

Private Sub BTNClick(ByVal sender As Object, ByVal e As EventArgs)
TV.Nodes.Add("C:")
Explorer(TV.Nodes.Item(0))
End Sub


Private Sub TVAfterExpand(ByVal sender As Object, ByVal e As TreeViewEventArgs)
Dim tn As TreeNode
For Each tn In e.Node.Nodes
Explorer(tn)
Next
End Sub


Comment manipule-t-on le TreeView par le code ?
---------------------------------------------------------------------------
La manipulation de l'arborescence peut être assez complexe si le concept de nœuds n'est pas correctement assimilé. En fait les objets TreeNodes qui composent un objet TreeView sont des collections récursives. Les règles suivantes s'appliquent toujours :
•Il n'existe qu'un noeud 'Root'. On l'identifie par la valeur " Nothing " de son parent.
•Un noeud n'a toujours qu'un seul parent.
•Un noeud ne fournit des informations que sur ses descendants directs.
Comme il s'agit de collection récursive, le code suivant parcourt tous les nœuds enfants du nœud passé en paramètre :


Private Sub ParcoursNoeud(ByVal MonNode As TreeNode)
MsgBox(MonNode.ToString)
Dim MonEnum As IEnumerator = MonNode.Nodes.GetEnumerator
While MonEnum.MoveNext
ParcoursNoeud(CType(MonEnum.Current, TreeNode))
End While
End Sub


La position hiérarchique (parfois appelée niveau d'imbrication) n'est pas toujours simple à connaître. Pour la trouver, je peux utiliser une fonction récursive du type :


Private Function Niveau(ByVal MonNode As TreeNode, ByVal Start As Boolean) As Int32
Static Pos As Int32
If Start Then Pos = 0
If MonNode.Parent Is Nothing Then
Return Pos
Else
Pos += 1
Niveau(MonNode.Parent, False)
Return Pos
End If
End Function


Que j'appellerais par exemple avec :


MsgBox(Niveau(Me.TreeView1.SelectedNode, True).ToString)


Toutefois cette approche n'est souvent pas la meilleure car les procédures récursives sont coûteuses en ressources. Généralement, on connaît à priori le niveau hiérarchique lors de la construction. Il est alors rentable de le stocker dans la propriété Tag de l'objet TreeNode lors de la construction du TreeView.


Comment remplir un contrôle TreeView avec le schéma d'une base Access ?
-------------------------------------------------------------------------------------------------------------
Nous allons donc créer un remplissage d'un TreeView par la structure d'une base de données Access. Je vais le coder un peu lourd pour séparer l'extraction de la structure du remplissage du TreeView sans utiliser une collection fortement typée.


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'code d'extraction de la structure
Dim lstStructure As New SortedList
Dim MaConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:UserNWIND.MDB;")
MaConn.Open()
Dim schemaTables As DataTable = MaConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
Dim MonEnumColonne, MonEnumTable As IEnumerator
Dim schemaColTable As DataTable
Dim ListColonne As ArrayList
MonEnumTable = schemaTables.Rows.GetEnumerator
While MonEnumTable.MoveNext
schemaColTable = MaConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, CType(MonEnumTable.Current, DataRow).Item("Table_Name"), Nothing})
ListColonne = New ArrayList
MonEnumColonne = schemaColTable.Rows.GetEnumerator
While MonEnumColonne.MoveNext
ListColonne.Add(CType(MonEnumColonne.Current, DataRow).Item("column_name"))
End While
lstStructure.Add(CType(MonEnumTable.Current, DataRow).Item("Table_Name"), ListColonne)
End While
MaConn.Close()
'remplissage du treeview
Dim NodRoot, NodTable, NodTemp As TreeNode
NodRoot = Me.TreeView1.Nodes.Add("biblio.mdb")
NodRoot.ImageIndex = 0
Dim cmpt1, cmpt2 As Int32
Dim MonEnum As IEnumerator
For cmpt1 = 0 To lstStructure.Count - 1
NodTable = NodRoot.Nodes.Add(CType(lstStructure.GetKey(cmpt1), String))
MonEnum = CType(lstStructure.GetByIndex(cmpt1), ArrayList).GetEnumerator
While MonEnum.MoveNext
NodTemp = New TreeNode
With NodTemp
.Text = CType(MonEnum.Current, String)
.ImageIndex = 2
End With
NodTable.Nodes.Add(NodTemp)
NodTable.ImageIndex = 1
End While
Next
Me.TreeView1.ImageList = Me.ImageList1

End Sub


Comment déterminer le TreeNode survolé par la souris ?
-------------------------------------------------------------------------------
Il faut pour cela traiter l'évènement MouseMove du TreeView :



'''
''' Evènement MouseMove du treeView1
'''

Private Sub treeView1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)

'Récupération du TreeNode survolé
Dim currentNode As TreeNode = treeView1.GetNodeAt(e.X, e.Y)
' Vérification que la souris survole bien un TreeNode
If Not (currentNode Is Nothing) Then
Console.WriteLine("Le node survolé est {0}", currentNode.Name)
End If
End Sub


Comment lister un répertoire dans une Treeview ?
-----------------------------------------------------------------------------
Ce bout de code permet de lister les fichiers et sous répertoires d'un répertoire spécifique. A la différence de ma source qui liste un répertoire dans une Listbox , cette méthode avec la TreeView permet de garder la hiérarchie de votre répertoire. Pour y parvenir, c'est un peu plus compliqué que pour la ListBox mais ce n'est pas si dur que ca.

Il faut créer une classe et coller le code ci dessous.

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



Ensuite, il faut instancier votre classe et lui fournir le nom de votre Treeview comme argument :

Private c As ListerRepertoire
Private Sub Form1_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


Il ne vous reste plus qu'à apprécier la rapidité du code avec un petit backgroundworker pour voir la progression (sinon cela de freezer).
Commentaires des visiteurs :
Ajouter votre commentaire :
Nom :
E-mail :
Commentaire :


Espace Abonné

Mot passe oublié?

Créez un compte maintenant.
Publicité

 
Copyright ©2020. Metacomputer Engineering s.a.r.l . tous les droits réservés