Question Treeview du C:\

Plus d'informations
il y a 11 ans 3 mois #19014 par Fabien
Treeview du C:\ a été créé par Fabien
Bonjour,
Je commence juste à apprendre le powershell et en même temps j'essaye de ma faire une petite appli.
Dans cette appli j'essaye de faire un treeview du \"C:\\" mais je rencontre quelque soucis, je m'explique:

1- quand la fenêtre s'ouvre cela affiche le treeview du \"c\" avec en 1er les dossiers racine et un noeud avec le \"+\" pour déployer et voir les sous dossiers et fichiers.
Or il me met aussi un \"+\" sur les fichiers.
J'ai beau essayer le \"-attributs\" ou \"ItemType\" rien ne fonctionne, je ne sais pas lui dire de créer des noeuds avec le \"+\" que pour les dossiers.

2- J'aimerai que quand il ouvre la fenêtre il \"charge\" que le \"Get-ChildItem\" des dossiers racine du \"C\" avec seulement les 1ers sous dossiers et fichiers de ces dossiers racine et non pas de tout le \"C\".
Dans mon script il le fait sur 2 niveaux (sous dossiers et sous-sous-dossiers et fichiers des dossiers racine du \"c\") mais j'aimerai qu'il charge les sous dossiers à partir du moment où l'on déploye le \"+\" du noeud.
j'ai beau utiliser \"If ($subnode.Expand){\" il charge tout à l'ouverture de la fenêtre, et c'est très long.

3 - Ma fonction \"NodeChild\" fonctionne très bien chez moi (powershell v3) mais pas du tout sur mon pc du boulot (powershell v2). Je l'ai mis ici en commentaire pour allerger le chargement.

Voici mon code:

[code:1][void][System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
[void][System.Reflection.Assembly]::LoadWithPartialName(\"System.Drawing\"«»)


#Création de la 2ème fenetre Form2
# create Window
$Form2 = New-Object System.Windows.Forms.Form
$Form2.Text = \"Form2\"
$Form2.Size = New-Object System.Drawing.Size(390, 590)
$Form2.StartPosition = \"CenterScreen\"
# create Treeview-Object
$TreeView1 = New-Object System.Windows.Forms.TreeView
$TreeView1.Location = New-Object System.Drawing.Point(15, 12)
$TreeView1.Size = New-Object System.Drawing.Size(250, 422)
$Form2.Controls.Add($TreeView1)
$TreeView1.CheckBoxes = $true


###### Add Nodes to Treeview
$dirdata = Get-ChildItem -Path \"c:\\"
$rootnode = New-Object System.Windows.Forms.TreeNode
$rootnode.text = \"C:\\"
$rootnode.name = \"C:\\"
$rootnode.Expand()
$rootnode.Tag = $dirdata

[void]$treeview1.Nodes.Add($rootnode)




foreach ( $obj in $dirdata ) {
if($obj){
$subnode1 = New-Object System.Windows.Forms.TreeNode
$subnode1.text = $obj.name
$subnode1.Name = $obj.Name
$subnode1.Tag = $obj.FullName
$rootnode.Nodes.Add($subnode1)

$children= Get-ChildItem $($subnode1.FullPath)
foreach($child in $children){
if($child){
$subnode2=New-Object System.Windows.Forms.TreeNode
$subnode2.Name = $child.Name
$subnode2.Text = $child.Name
$subnode2.Tag = $child.FullName
$subnode1.Nodes.Add($subnode2)

If ($subnode2.Expand){
$children= Get-ChildItem $($subnode2.FullPath)
foreach($child in $children){
if($child){
$subnode3=New-Object System.Windows.Forms.TreeNode
$subnode3.Name = $child.Name
$subnode3.Text = $child.Name
$subnode3.Tag = $child.FullName
$subnode2.Nodes.Add($subnode3)

#NodeChild -Node1 $subnode3 -Node2 $subnode4
}
}
}
}
}
}
}


[void]$form2.showdialog()






Function NodeChild
{
param($Node1, $Node2)

$children= Get-ChildItem $($Node1.FullPath)

foreach($child in $children){
if($child){
$Node2=New-Object System.Windows.Forms.TreeNode
$Node2.Name = $child.Name
$Node2.Text = $child.Name
$Node2.Tag = $child.FullName
$Node1.Nodes.Add($Node2)
}
}
}[/code:1]


Merci de pouvoir m'aider.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 3 mois #19016 par xyz
Réponse de xyz sur le sujet Re:Treeview du C:\
Par curiosité, pourquoi ne pas continuer le post de ta première demande ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 3 mois #19020 par Fabien
Réponse de Fabien sur le sujet Re:Treeview du C:\
Laurent Dardenne écrit:

Par curiosité, pourquoi ne pas continuer le post de ta première demande ?


Car tu as répondu et que le sujet est, pour moi, clos.
Pourquoi voudrais tu que je continue ce post sur un probable logiciel semblable à Powershellstudio de Sapien qui n'existe pas?

D'ailleurs comment on fait pour cloturer un post ici?

Message édité par: Bylliboy, à: 11/02/15 17:10<br><br>Message édité par: Bylliboy, à: 11/02/15 17:21

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 3 mois #19022 par xyz
Réponse de xyz sur le sujet Re:Treeview du C:\
Bylliboy écrit:

Car tu as répondu et que le sujet est, pour moi, clos.

Pas vraiment, puisque tu continues à rencontrer qq problèmes. Mais bon, ici ou ailleurs pourquoi pas.
Bylliboy écrit:

Pourquoi voudrais tu que je continue ce post sur un probable logiciel semblable à Powershellstudio de Sapien qui n'existe pas?

Vu sous cet angle, effectivement je comprends mieux.
Bylliboy écrit:

D'ailleurs comment on fait pour clôturer un post ici?

Il n'y a pas cette fonctionnalité sur ce forum. Tu laisse le post en l'état.

Si tu as un peu de patience, je suis en train de construire une démo d'un Treeview que j'ajouterais à ce projet .

Pour gérer la lecture au cas par cas, il faut je pense combiner plusieurs événements :
[code:1]function OnBeforeExpand_treeVwDirectories {
...
}

function OnClick_treeVwDirectories {
...
}
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 11/02/15 17:34

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 3 mois #19052 par xyz
Réponse de xyz sur le sujet Re:Treeview du C:\
Une démo utilisant les events NodeMouseClick et NodeMouseDoubleClick.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena