Question TreeView PowerShell 4
- Didier HOUDAS
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 10 ans 5 mois #20770
par Didier HOUDAS
TreeView PowerShell 4 a été créé par Didier HOUDAS
Bonjour,
il y a maintenant 2 ans j'ai écrit un petit outil de configuration pour ma société, en powershell 2.
Je dois maintenant le faire fonctionner en powershell 4.
Après installation de la mise à jour du framework, les treeView, que j'utilise abondamment dans ce script ne fonctionnement plus du tout.
Pas de rafraichissement de l'écran et pourtant je n'ai pas d'erreur en sortie console.
Avez-vous déjà eu des problèmes avec ces composants ?
Je dois surement m'y prendre mal, pouvez-vous m'aider SVP ?
Merci.
Le script d'exemple de mon implémentation.
[code:1]
$NodeClientAfterSelected=
{
# GroupBox zone de conf
$groupBoxConfParameters.Dispose()
$Form.refresh()
$groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
$groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
$groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
$groupBoxConfParameters.FlatStyle=\"Flat\"
$groupBoxConfParameters.text = \"Zone de Configuration\"
[void]$Form.Controls.Add($groupBoxConfParameters)
switch ($this.SelectedNode.Tag)
{
\"EntreeA\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree A\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
$Form.refresh()
break;
}
\"EntreeB\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree B\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
$Form.refresh()
break
}
Default
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Jocker\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
$Form.refresh()
break
}
}
}
#
# Fenetre principale
#
$Form = New-Object system.Windows.Forms.Form
$Form.Text = \"Configurateur\"
$Form.Name = \"Config\"
$Form.width = 803
$Form.height = 660
$Form.controlbox=$true
$Form.StartPosition = \"CenterScreen\"
$Form.FormBorderStyle = \"FixedSingle\"
$Form.TopMost = 0
$Form.MinimizeBox = $true
$Form.MaximizeBox = $False
$treeViewConf = New-Object System.Windows.Forms.TreeView
$treeViewConf.Size = New-Object System.Drawing.Size 240, 494
$treeViewConf.Location = New-Object System.Drawing.Point 14, 45
$treeViewConf.Name = \"treeViewIGCKeysConfig\"
$treeViewConf.DataBindings.DefaultDataSourceUpdateMode = 0
$treeViewConf.BorderStyle=\"FixedSingle\"
$treeViewConf.ShowPlusMinus = $false
$treeViewConf.LabelEdit = $false
$treeViewConf.HotTracking=$true
$treeViewConf.TabIndex = 0
$treeViewConf.showNodeToolTips=$true
$treeViewConf.dock='none'
$treeViewConf.hideselection=$true
$treeViewConf.showLines=$false
$treeViewConf.showRootLines=$false
$treeViewConf.fullRowSelect=$true
$newNodeA = new-object System.Windows.Forms.TreeNode
$newNodeA.Name = \"EntreeA\"
$newNodeA.Text = \"EntreeA\"
$newNodeA.Tag = \"EntreeA\"
$newNodeA.tooltiptext=\"EntreeA\"
$newNodeA.Expand()
$newNodeA.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeA)
$newNodeB = new-object System.Windows.Forms.TreeNode
$newNodeB.Name = \"EntreeB\"
$newNodeB.Text = \"EntreeB\"
$newNodeB.Tag = \"EntreeB\"
$newNodeB.tooltiptext=\"EntreeB\"
$newNodeB.Expand()
$newNodeB.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeB )
$treeViewConf.add_AfterSelect($NodeClientAfterSelected)
# GroupBox zone de conf
$groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
$groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
$groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
$groupBoxConfParameters.enabled=$false
$groupBoxConfParameters.FlatStyle=\"Flat\"
$groupBoxConfParameters.text = \"Zone de Configuration\"
[void]$Form.Controls.Add($treeViewConf)
[void]$Form.Controls.Add($groupBoxConfParameters)
$Form.showDialog()
[/code:1]
il y a maintenant 2 ans j'ai écrit un petit outil de configuration pour ma société, en powershell 2.
Je dois maintenant le faire fonctionner en powershell 4.
Après installation de la mise à jour du framework, les treeView, que j'utilise abondamment dans ce script ne fonctionnement plus du tout.
Pas de rafraichissement de l'écran et pourtant je n'ai pas d'erreur en sortie console.
Avez-vous déjà eu des problèmes avec ces composants ?
Je dois surement m'y prendre mal, pouvez-vous m'aider SVP ?
Merci.
Le script d'exemple de mon implémentation.
[code:1]
$NodeClientAfterSelected=
{
# GroupBox zone de conf
$groupBoxConfParameters.Dispose()
$Form.refresh()
$groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
$groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
$groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
$groupBoxConfParameters.FlatStyle=\"Flat\"
$groupBoxConfParameters.text = \"Zone de Configuration\"
[void]$Form.Controls.Add($groupBoxConfParameters)
switch ($this.SelectedNode.Tag)
{
\"EntreeA\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree A\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
$Form.refresh()
break;
}
\"EntreeB\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree B\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
$Form.refresh()
break
}
Default
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Jocker\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
$Form.refresh()
break
}
}
}
#
# Fenetre principale
#
$Form = New-Object system.Windows.Forms.Form
$Form.Text = \"Configurateur\"
$Form.Name = \"Config\"
$Form.width = 803
$Form.height = 660
$Form.controlbox=$true
$Form.StartPosition = \"CenterScreen\"
$Form.FormBorderStyle = \"FixedSingle\"
$Form.TopMost = 0
$Form.MinimizeBox = $true
$Form.MaximizeBox = $False
$treeViewConf = New-Object System.Windows.Forms.TreeView
$treeViewConf.Size = New-Object System.Drawing.Size 240, 494
$treeViewConf.Location = New-Object System.Drawing.Point 14, 45
$treeViewConf.Name = \"treeViewIGCKeysConfig\"
$treeViewConf.DataBindings.DefaultDataSourceUpdateMode = 0
$treeViewConf.BorderStyle=\"FixedSingle\"
$treeViewConf.ShowPlusMinus = $false
$treeViewConf.LabelEdit = $false
$treeViewConf.HotTracking=$true
$treeViewConf.TabIndex = 0
$treeViewConf.showNodeToolTips=$true
$treeViewConf.dock='none'
$treeViewConf.hideselection=$true
$treeViewConf.showLines=$false
$treeViewConf.showRootLines=$false
$treeViewConf.fullRowSelect=$true
$newNodeA = new-object System.Windows.Forms.TreeNode
$newNodeA.Name = \"EntreeA\"
$newNodeA.Text = \"EntreeA\"
$newNodeA.Tag = \"EntreeA\"
$newNodeA.tooltiptext=\"EntreeA\"
$newNodeA.Expand()
$newNodeA.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeA)
$newNodeB = new-object System.Windows.Forms.TreeNode
$newNodeB.Name = \"EntreeB\"
$newNodeB.Text = \"EntreeB\"
$newNodeB.Tag = \"EntreeB\"
$newNodeB.tooltiptext=\"EntreeB\"
$newNodeB.Expand()
$newNodeB.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeB )
$treeViewConf.add_AfterSelect($NodeClientAfterSelected)
# GroupBox zone de conf
$groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
$groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
$groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
$groupBoxConfParameters.enabled=$false
$groupBoxConfParameters.FlatStyle=\"Flat\"
$groupBoxConfParameters.text = \"Zone de Configuration\"
[void]$Form.Controls.Add($treeViewConf)
[void]$Form.Controls.Add($groupBoxConfParameters)
$Form.showDialog()
[/code:1]
La pièce jointe config_framework.ps1 est absente ou indisponible
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 5 mois #20776
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:TreeView PowerShell 4
Salut,
la portée a changer pour les gestionnaire d'event, utilise $script: pour référencer les variables du script.
Il existe aussi qq facilités d'écriture qui peuvent modifier le comportement, par exemple l'itération automatique sur une collection.
Mais on ne connait pas le rendu visuelle que tu as sous PS v2.
la portée a changer pour les gestionnaire d'event, utilise $script: pour référencer les variables du script.
Il existe aussi qq facilités d'écriture qui peuvent modifier le comportement, par exemple l'itération automatique sur une collection.
Mais on ne connait pas le rendu visuelle que tu as sous PS v2.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Didier HOUDAS
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 10 ans 5 mois #20778
par Didier HOUDAS
Réponse de Didier HOUDAS sur le sujet Re:TreeView PowerShell 4
Salut et merci pour ta réponse,
en PSv2, quand je clique sur une des entrées du TreeView je change l'affichage de la zone groupBoxConfParameters.
Pour l'exemple que j'ai posté ça doit afficher \"Entree A\" quand on clique sur Entrée A et \"Entree B\" quand on clique sur l'autre.
En PSv4 l'affichage reste bloqué sur \"Entree A\", il n'y a pas de rafraichissement. Même en forçant le refresh comme c'est fait dans le script.
Merci.
en PSv2, quand je clique sur une des entrées du TreeView je change l'affichage de la zone groupBoxConfParameters.
Pour l'exemple que j'ai posté ça doit afficher \"Entree A\" quand on clique sur Entrée A et \"Entree B\" quand on clique sur l'autre.
En PSv4 l'affichage reste bloqué sur \"Entree A\", il n'y a pas de rafraichissement. Même en forçant le refresh comme c'est fait dans le script.
Merci.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 5 mois #20780
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:TreeView PowerShell 4
Je n'ai pas le temps de creuser ce pb, mais voici une solution (v2/v4) à valider :
[code:1]Add-type -assemblyname System.Windows.Forms
$NodeClientAfterSelected=
{
# GroupBox zone de conf
$script:groupBoxConfParameters.Controls.Clear()
#$script:Form.refresh()
# $groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
# $groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
# $groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
# $groupBoxConfParameters.FlatStyle=\"Flat\"
# $groupBoxConfParameters.text = \"Zone de Configuration\"
#
# [void]$script:Form.Controls.Add($groupBoxConfParameters)
switch ($this.SelectedNode.Tag)
{
\"EntreeA\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree A\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
#$script:Form.refresh()
break;
}
\"EntreeB\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree B\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
#$script:Form.refresh()
break
}
Default
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Jocker\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
#$script:Form.refresh()
break
}
}
}
#
# Fenetre principale
#
$Form = New-Object system.Windows.Forms.Form
$Form.Text = \"Configurateur\"
$Form.Name = \"Config\"
$Form.width = 803
$Form.height = 660
$Form.controlbox=$true
$Form.StartPosition = \"CenterScreen\"
$Form.FormBorderStyle = \"FixedSingle\"
$Form.TopMost = 0
$Form.MinimizeBox = $true
$Form.MaximizeBox = $False
$treeViewConf = New-Object System.Windows.Forms.TreeView
$treeViewConf.Size = New-Object System.Drawing.Size 240, 494
$treeViewConf.Location = New-Object System.Drawing.Point 14, 45
$treeViewConf.Name = \"treeViewIGCKeysConfig\"
$treeViewConf.DataBindings.DefaultDataSourceUpdateMode = 0
$treeViewConf.BorderStyle=\"FixedSingle\"
$treeViewConf.ShowPlusMinus = $false
$treeViewConf.LabelEdit = $false
$treeViewConf.HotTracking=$true
$treeViewConf.TabIndex = 0
$treeViewConf.showNodeToolTips=$true
$treeViewConf.dock='none'
$treeViewConf.hideselection=$true
$treeViewConf.showLines=$false
$treeViewConf.showRootLines=$false
$treeViewConf.fullRowSelect=$true
$newNodeA = new-object System.Windows.Forms.TreeNode
$newNodeA.Name = \"EntreeA\"
$newNodeA.Text = \"EntreeA\"
$newNodeA.Tag = \"EntreeA\"
$newNodeA.tooltiptext=\"EntreeA\"
$newNodeA.Expand()
$newNodeA.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeA)
$newNodeB = new-object System.Windows.Forms.TreeNode
$newNodeB.Name = \"EntreeB\"
$newNodeB.Text = \"EntreeB\"
$newNodeB.Tag = \"EntreeB\"
$newNodeB.tooltiptext=\"EntreeB\"
$newNodeB.Expand()
$newNodeB.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeB )
$treeViewConf.add_AfterSelect($NodeClientAfterSelected)
# GroupBox zone de conf
$groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
$groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
$groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
$groupBoxConfParameters.enabled=$false
$groupBoxConfParameters.FlatStyle=\"Flat\"
$groupBoxConfParameters.text = \"Zone de Configuration\"
[void]$Form.Controls.Add($treeViewConf)
[void]$Form.Controls.Add($groupBoxConfParameters)
$Form.showDialog()[/code:1]
[code:1]Add-type -assemblyname System.Windows.Forms
$NodeClientAfterSelected=
{
# GroupBox zone de conf
$script:groupBoxConfParameters.Controls.Clear()
#$script:Form.refresh()
# $groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
# $groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
# $groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
# $groupBoxConfParameters.FlatStyle=\"Flat\"
# $groupBoxConfParameters.text = \"Zone de Configuration\"
#
# [void]$script:Form.Controls.Add($groupBoxConfParameters)
switch ($this.SelectedNode.Tag)
{
\"EntreeA\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree A\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
#$script:Form.refresh()
break;
}
\"EntreeB\"
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Entree B\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
#$script:Form.refresh()
break
}
Default
{
$Label_explain = New-Object System.Windows.Forms.Label
$Label_explain.Text = \"Jocker\"
$Label_explain.Location = New-Object Drawing.Point 30,30
$Label_explain.AutoSize = $true
$groupBoxConfParameters.Controls.Add($Label_explain)
#$script:Form.refresh()
break
}
}
}
#
# Fenetre principale
#
$Form = New-Object system.Windows.Forms.Form
$Form.Text = \"Configurateur\"
$Form.Name = \"Config\"
$Form.width = 803
$Form.height = 660
$Form.controlbox=$true
$Form.StartPosition = \"CenterScreen\"
$Form.FormBorderStyle = \"FixedSingle\"
$Form.TopMost = 0
$Form.MinimizeBox = $true
$Form.MaximizeBox = $False
$treeViewConf = New-Object System.Windows.Forms.TreeView
$treeViewConf.Size = New-Object System.Drawing.Size 240, 494
$treeViewConf.Location = New-Object System.Drawing.Point 14, 45
$treeViewConf.Name = \"treeViewIGCKeysConfig\"
$treeViewConf.DataBindings.DefaultDataSourceUpdateMode = 0
$treeViewConf.BorderStyle=\"FixedSingle\"
$treeViewConf.ShowPlusMinus = $false
$treeViewConf.LabelEdit = $false
$treeViewConf.HotTracking=$true
$treeViewConf.TabIndex = 0
$treeViewConf.showNodeToolTips=$true
$treeViewConf.dock='none'
$treeViewConf.hideselection=$true
$treeViewConf.showLines=$false
$treeViewConf.showRootLines=$false
$treeViewConf.fullRowSelect=$true
$newNodeA = new-object System.Windows.Forms.TreeNode
$newNodeA.Name = \"EntreeA\"
$newNodeA.Text = \"EntreeA\"
$newNodeA.Tag = \"EntreeA\"
$newNodeA.tooltiptext=\"EntreeA\"
$newNodeA.Expand()
$newNodeA.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeA)
$newNodeB = new-object System.Windows.Forms.TreeNode
$newNodeB.Name = \"EntreeB\"
$newNodeB.Text = \"EntreeB\"
$newNodeB.Tag = \"EntreeB\"
$newNodeB.tooltiptext=\"EntreeB\"
$newNodeB.Expand()
$newNodeB.BackColor='white'
[void]$treeViewConf.Nodes.Add($newNodeB )
$treeViewConf.add_AfterSelect($NodeClientAfterSelected)
# GroupBox zone de conf
$groupBoxConfParameters = New-Object System.Windows.Forms.GroupBox
$groupBoxConfParameters.Location = New-Object System.Drawing.Size(260,40)
$groupBoxConfParameters.size = New-Object System.Drawing.Size(523,500)
$groupBoxConfParameters.enabled=$false
$groupBoxConfParameters.FlatStyle=\"Flat\"
$groupBoxConfParameters.text = \"Zone de Configuration\"
[void]$Form.Controls.Add($treeViewConf)
[void]$Form.Controls.Add($groupBoxConfParameters)
$Form.showDialog()[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Didier HOUDAS
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 10 ans 5 mois #20781
par Didier HOUDAS
Réponse de Didier HOUDAS sur le sujet Re:TreeView PowerShell 4
Effectivement, mon dispose() en début d'affichage n'était pas des plus élégants.
Ta solution fonctionne nickel. Je vais revoir mon code pour améliorer les choses.
Merci encore.
Ta solution fonctionne nickel. Je vais revoir mon code pour améliorer les choses.
Merci encore.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 5 mois #20782
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:TreeView PowerShell 4
doudz écrit:
Le dispose en dehors de liste me semble est un peu violent
Ensuite de savoir pourquoi cela fonctionne en V2 et en V4, je passe mon tour
Un RemoveByKey sur $Form.Controls serait préférable .Effectivement, mon dispose() en début d'affichage n'était pas des plus élégants.
Le dispose en dehors de liste me semble est un peu violent
Ensuite de savoir pourquoi cela fonctionne en V2 et en V4, je passe mon tour
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.063 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- TreeView PowerShell 4