Question
Portée des variables sur un bouton d'une interface
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 9 ans 8 mois #17891
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Portée des variables sur un bouton d'une interface
ANTRI Mohamed écrit:
Et les tests remontent souvent ce type de pb.
J'utilise un système de log pour les scripts en prod.Je trouve qu'en modifiant les portées souvent c'est une galère pour troubleshooter
Et les tests remontent souvent ce type de pb.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 9 ans 8 mois #17892
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Portée des variables sur un bouton d'une interface
anonym17 écrit:
Il y a peut être un bug sur l'accès à la variable nb déclaré dans l'appelant :
[code:1]
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')
$form = New-Object System.Windows.Forms.Form
$bouton_passer = New-Object System.Windows.Forms.Button
#$script:nb = 5
$nb = 5
$MyVar = -500
$bouton_passer.Location = New-Object System.Drawing.Point(260, 120)
$bouton_passer.Size = New-Object System.Drawing.Size(90, 50)
$bouton_passer.Text = 'Passer'
$bouton_passer.ImageAlign = 'MiddleCenter'
Function AddClick {
Write-host ('-' * 80)
write-host \"[Func] Before nb=$nb `t v.value=$($v.value)\"
$v.value++
$nb=256
write-host \"[Func] After nb=$nb `t v.value=$($v.value)\"
}#AddClick
$bouton_passer.Add_Click({
Write-host ('*' * 80)
write-host \"Delegate nb = $nb `t MyVar=$MyVar\"
#Renvoie bien la variable $nb déclarée dans la portée de l'appelant
#Get-variable n*|% { Write-host $_.name }
$v=Get-variable nb
write-host \"Before nb=$nb `t v.value=$($v.value) `t MyVar=$MyVar\"
Write-Warning \"nb*2. V contient la valeur d'origine de nb. MyVar+1\"
$nb*=2
$MyVar++
write-host \"Test nb*2= $nb `t v.value=$($v.value) `t MyVar=$MyVar\"
$v.value++
Write-Warning \"nb n'est pas modifié. V+1\"
write-host \"After nb=$nb `t v.value=$($v.value)\"
#write-host ([runspace]::«»DefaultRunspace.InstanceId)
AddClick
})
# Même pb si on utilise $nb
#$bouton_passer.Add_Click( { AddClick} )
$form.Location = New-Object System.Drawing.Point(0,0)
$form.ClientSize = New-Object System.Drawing.Size(1500,632)
$form.BackColor = 'GhostWhite'
$form.Text = 'Quizz Animaux'
$form.StartPosition = 'CenterScreen'
$form.Controls.Add($bouton_passer)
[runspace]::«»DefaultRunspace.InstanceId
$form.ShowDialog()
$nb
$v
$myvar
[/code:1]
Le comportement est bien différent avec la v2, les variables PS $NB et $V pointent bien sur le même objet. Mais pas avec la v3.
Si qq peux tester avec la V4
Utiliser Get-Variable, mais pour le moment j'ai un doute.tu vois une autre solution à mon problème?
Il y a peut être un bug sur l'accès à la variable nb déclaré dans l'appelant :
[code:1]
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')
$form = New-Object System.Windows.Forms.Form
$bouton_passer = New-Object System.Windows.Forms.Button
#$script:nb = 5
$nb = 5
$MyVar = -500
$bouton_passer.Location = New-Object System.Drawing.Point(260, 120)
$bouton_passer.Size = New-Object System.Drawing.Size(90, 50)
$bouton_passer.Text = 'Passer'
$bouton_passer.ImageAlign = 'MiddleCenter'
Function AddClick {
Write-host ('-' * 80)
write-host \"[Func] Before nb=$nb `t v.value=$($v.value)\"
$v.value++
$nb=256
write-host \"[Func] After nb=$nb `t v.value=$($v.value)\"
}#AddClick
$bouton_passer.Add_Click({
Write-host ('*' * 80)
write-host \"Delegate nb = $nb `t MyVar=$MyVar\"
#Renvoie bien la variable $nb déclarée dans la portée de l'appelant
#Get-variable n*|% { Write-host $_.name }
$v=Get-variable nb
write-host \"Before nb=$nb `t v.value=$($v.value) `t MyVar=$MyVar\"
Write-Warning \"nb*2. V contient la valeur d'origine de nb. MyVar+1\"
$nb*=2
$MyVar++
write-host \"Test nb*2= $nb `t v.value=$($v.value) `t MyVar=$MyVar\"
$v.value++
Write-Warning \"nb n'est pas modifié. V+1\"
write-host \"After nb=$nb `t v.value=$($v.value)\"
#write-host ([runspace]::«»DefaultRunspace.InstanceId)
AddClick
})
# Même pb si on utilise $nb
#$bouton_passer.Add_Click( { AddClick} )
$form.Location = New-Object System.Drawing.Point(0,0)
$form.ClientSize = New-Object System.Drawing.Size(1500,632)
$form.BackColor = 'GhostWhite'
$form.Text = 'Quizz Animaux'
$form.StartPosition = 'CenterScreen'
$form.Controls.Add($bouton_passer)
[runspace]::«»DefaultRunspace.InstanceId
$form.ShowDialog()
$nb
$v
$myvar
[/code:1]
Le comportement est bien différent avec la v2, les variables PS $NB et $V pointent bien sur le même objet. Mais pas avec la v3.
Si qq peux tester avec la V4
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- clément
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 23
- Remerciements reçus 0
il y a 9 ans 8 mois #17894
par clément
Réponse de clément sur le sujet Re:Portée des variables sur un bouton d'une interface
merci pour toute ses réponses et si rapidement
effectivement, le fonctionnement de la portée des variables est peu documenté, bien que son fonctionnement soit assez simple.
je n'es malheureusement pas la V4, sinon j'aurai directement tester si le bug avais était corrigé.
Si j'ai une occasion de tester en V4, je ferais le test
Merci en tout cas de tes réponses
effectivement, le fonctionnement de la portée des variables est peu documenté, bien que son fonctionnement soit assez simple.
je n'es malheureusement pas la V4, sinon j'aurai directement tester si le bug avais était corrigé.
Si j'ai une occasion de tester en V4, je ferais le test
Merci en tout cas de tes réponses
Connexion ou Créer un compte pour participer à la conversation.
- clément
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 23
- Remerciements reçus 0
il y a 9 ans 8 mois #17895
par clément
Réponse de clément sur le sujet Re:Portée des variables sur un bouton d'une interface
Au final, je me suis installé un PowerShell V4
Le problème est identique à la V3. <br><br>Message édité par: anonym17, à: 5/08/14 10:11
Le problème est identique à la V3. <br><br>Message édité par: anonym17, à: 5/08/14 10:11
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 9 ans 8 mois #17898
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Portée des variables sur un bouton d'une interface
anonym17 écrit:
Merci.
Il reste à vérifier sur MSConnect si ce pb est référencé, mais pour le moment la recherche n'y est pas opérationnelle.
Au final, je me suis installé un PowerShell V4
Le problème est identique à la V3.
Merci.
Il reste à vérifier sur MSConnect si ce pb est référencé, mais pour le moment la recherche n'y est pas opérationnelle.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- clément
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 23
- Remerciements reçus 0
il y a 9 ans 5 mois #18368
par clément
Réponse de clément sur le sujet Re:Portée des variables sur un bouton d'une interface
je reviens sur se problème, où la portée de la variable est limité a l'exécution du bouton. la solution est donc de changer la portée de la variable que l'on veut récupérer
.
Maintenant, la même question se pose, mais cette fois pour le les fonctions.
Imaginons, par l'action d'un bouton, celui-ci exécute un fichier PS1 contenant des fonctions afin de les mettre en mémoire.
le problème est le même que pour les variables.
comment faire pour que ma fonction soit accessibles à tout mon script? car je ne pense pas que l'on puisse appliquer de portée sur une fonction à ma connaissance.
merci d'avance
.
Maintenant, la même question se pose, mais cette fois pour le les fonctions.
Imaginons, par l'action d'un bouton, celui-ci exécute un fichier PS1 contenant des fonctions afin de les mettre en mémoire.
le problème est le même que pour les variables.
comment faire pour que ma fonction soit accessibles à tout mon script? car je ne pense pas que l'on puisse appliquer de portée sur une fonction à ma connaissance.
merci d'avance
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.089 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Portée des variables sur un bouton d'une interface