Question Menu et variable créée selon le besoin

Plus d'informations
il y a 12 ans 2 semaines #11399 par steph_d
Bonjour à tous

Voilà l'idée, faire un menu qui affiche un bouton d'exécution pour les différents scripts auxquels l'utilisateur à droit.
[code:1]
$ch_PS = (Get-WmiObject Win32_OperatingSystem -ComputerName .).OSArchitecture
If ($ch_PS -eq '64 bits')
{ $ch_PS = '%windir%\Syswow64\WindowsPowerShell\v1.0\powershell.exe' }
ElseIf ($ch_PS -eq '32 bits')
{ $ch_PS = '%windir%\System32\WindowsPowerShell\v1.0\powershell.exe' }
Else
{ $ch_PS = '' }

$formMenu = New-Object Windows.Forms.form
$formMenu.Size = New-Object System.drawing.Size @(200,300)
$formMenu.Text = 'Outils Informatique'
$formMenu.StartPosition = [System.windows.forms.FormStartPosition]::Manual
$formMenu.Location = New-Object System.Drawing.Point(0,0)
$boutons = @()
$boutons = @(New-Object System.Windows.Forms.Button)
$boutons[0].Text = 'Quitter'
$boutons[0].Location = New-Object System.Drawing.Point(5,5)
$boutons[0].Size = New-Object System.Drawing.Size(180,25)
$boutons[0].TabIndex = 0
$boutons[0].add_Click(
{ $formMenu.Close() })
$formMenu.controls.add($boutons[0])
$list = Get-ChildItem S:\Informatique\Outils\*.ps1 -exclude menu.ps1
$i=0
ForEach ($elem in $list)
{
$r = Get-Content $elem
If ($r -ne $null)
{
$boutons += @(New-Object System.Windows.Forms.Button)
$i ++
$boutons[$i].Text = $elem.Name.Replace('.ps1','')
$boutons[$i].Location = New-Object System.Drawing.Point(5,$(5+(25*$i)))
$boutons[$i].Size = New-Object System.Drawing.Size(180,25)
$boutons[$i].TabIndex = $i
$boutons[$i].add_Click(
{
write-host $boutons[$i].Text
})
$formMenu.controls.add($boutons[$i])
}
}
$formMenu.Add_Shown({$formMenu.Activate()})
[void]$formMenu.showdialog()
[/code:1]

Alors je récupère bien ma collection de boutrons selon les droits de l'utilisateur là ou ça coince c'est dans la fonction add_click. J'aimerai bien savoir sur quel bouton j'ai cliqué pour pouvoir lancer le script qui va bien. En fait je récupère toujours le dernier bouton crée.
J'avais trouvé une parade qui consiste à construire un script dynamiquement puis à l'exécuter, mais je pense que ça doit faisable aussi de cette façon.
Avez vous des idées , là moi je suis un peu sec (comme le temps).

Stephane

@+ Steph

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

Plus d'informations
il y a 12 ans 2 semaines #11403 par Laurent Dardenne
steph_d écrit:

là moi je suis un peu sec (comme le temps).

Ah ouai, les carottes vont être hors de prix :woohoo:

Ceci dit, dans ton script il est normal qu'il récupère le dernier bouton créé, PS fait ce que tu lui demandes, à savoir afficher le dernier bouton crée, cf. $i. Un bel effet de bord !!

La solution est de référencer l'objet déclenchant l'event dans le gestionnaire d'événement, sous PS on le référence avec la variable automatique $this, qui est le Sender de la doc MSDN .
Rappel: un event peut être partagé par + composants graphique, le 'Sender' est donc celui qui déclenche l'event :
[code:1]
If ($r -ne $null)
{
$i++
$CurrentButton = New-Object System.Windows.Forms.Button
$CurrentButton.Text = $elem.Name.Replace('.ps1','')
$CurrentButton.Location = New-Object System.Drawing.Point(5,$(5+(25*$i)))
$CurrentButton.Size = New-Object System.Drawing.Size(180,25)
$CurrentButton.TabIndex = $i
$CurrentButton.add_Click(
{
Write-Warning \"Call $($this.Text)\"
#On récupère EventArgs via $_
})
$formMenu.controls.add($CurrentButton)
}
[/code:1]
Et là, ça marche plus mieux :)

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 2 semaines #11408 par steph_d
Hello

Je dois avouer que je n'ai pas vraiment été surpris par l'effet de bord. Par ta solution non plus, je me doutais que c'était possible mais par contre je ne savais pas comment. En tout cas je te remercie ça fonctionne nickel, il me reste plus qu'à analyser le truc pour comprendre comment ça fonctionne et ce qu'on peut faire avec.

Merci
Stephane

@+ Steph

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

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