Question
Creation d'objets dans un Foreach
- Bruno95
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 72
- Remerciements reçus 2
il y a 6 mois 3 semaines #34216
par Bruno95
Creation d'objets dans un Foreach a été créé par Bruno95
Bonjour, je viens de m'inscrire,
Ce que je souhaiterai:
Creer un objet de type Button, dans une boucle Foreach, se basant sur un tableau de noms de Button,
et lui ajouter un Add-click.
Dans mon exemple, un seul poste dans le tableau, affichage dans la console de ma variable $element, qui est egale a $Button1A.
Mais l'objet Button n' est pas créé ?
LE SCRIPT:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$buttonarray = '$Button1A'
#FONCTIONS
#
function fNew-button {
foreach ($button in $buttonarray) {
$button
$button = New-Object System.Windows.Forms.Button
$button.location = New-Object System.Drawing.Point(21,29)
$button.Size = New-Object System.Drawing.Size(60,60)
#$Button1B = New-Object System.Windows.Forms.Button
#$Button1B.Location = New-Object System.Drawing.Point(80,29)
#$Button1B.Size = New-Object System.Drawing.Size(60,60)
$button.Add_Click({
$button.backcolor = 'green'
})
}
}
#MISE EN FORME
#
$page = New-Object System.Windows.Forms.Form
$page.FormBorderStyle = 3 #fenêtre à taille fixe
$page.Maximizebox = $false
$page.size = New-Object System.Drawing.Size(1860,1020)
$page.StartPosition = 'CenterScreen'
$page.Text = 'LA FENETRE'
$page.BackColor = 'black'
$fenetrejoueur = New-Object System.Windows.Forms.GroupBox
$fenetrejoueur.Location = New-Object System.Drawing.Point(20,22)
$fenetrejoueur.Width = 888
$fenetrejoueur.Height = 900
#$fenetrejoueur.Text = « User »
$fenetreordinateur = New-Object System.Windows.Forms.GroupBox
$fenetreordinateur.Location = New-Object System.Drawing.Point(946,22)
$fenetreordinateur.Width = 888
$fenetreordinateur.Height = 900
#$fenetreordinateur.Text = « Station »
$page.controls.AddRange(@($Button1A,$fenetrejoueur,$fenetreordinateur)
)
#TRAITEMENT
#
fNew-button
#AFFICHAGE
#
$page.ShowDialog()
Voila, si vous pouvez m'aider, ca ne doit pas etre grand chose, ou alors je m'y prends mal
Bruno.
Ce que je souhaiterai:
Creer un objet de type Button, dans une boucle Foreach, se basant sur un tableau de noms de Button,
et lui ajouter un Add-click.
Dans mon exemple, un seul poste dans le tableau, affichage dans la console de ma variable $element, qui est egale a $Button1A.
Mais l'objet Button n' est pas créé ?
LE SCRIPT:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$buttonarray = '$Button1A'
#FONCTIONS
#
function fNew-button {
foreach ($button in $buttonarray) {
$button
$button = New-Object System.Windows.Forms.Button
$button.location = New-Object System.Drawing.Point(21,29)
$button.Size = New-Object System.Drawing.Size(60,60)
#$Button1B = New-Object System.Windows.Forms.Button
#$Button1B.Location = New-Object System.Drawing.Point(80,29)
#$Button1B.Size = New-Object System.Drawing.Size(60,60)
$button.Add_Click({
$button.backcolor = 'green'
})
}
}
#MISE EN FORME
#
$page = New-Object System.Windows.Forms.Form
$page.FormBorderStyle = 3 #fenêtre à taille fixe
$page.Maximizebox = $false
$page.size = New-Object System.Drawing.Size(1860,1020)
$page.StartPosition = 'CenterScreen'
$page.Text = 'LA FENETRE'
$page.BackColor = 'black'
$fenetrejoueur = New-Object System.Windows.Forms.GroupBox
$fenetrejoueur.Location = New-Object System.Drawing.Point(20,22)
$fenetrejoueur.Width = 888
$fenetrejoueur.Height = 900
#$fenetrejoueur.Text = « User »
$fenetreordinateur = New-Object System.Windows.Forms.GroupBox
$fenetreordinateur.Location = New-Object System.Drawing.Point(946,22)
$fenetreordinateur.Width = 888
$fenetreordinateur.Height = 900
#$fenetreordinateur.Text = « Station »
$page.controls.AddRange(@($Button1A,$fenetrejoueur,$fenetreordinateur)
)
#TRAITEMENT
#
fNew-button
#AFFICHAGE
#
$page.ShowDialog()
Voila, si vous pouvez m'aider, ca ne doit pas etre grand chose, ou alors je m'y prends mal
Bruno.
Connexion ou Créer un compte pour participer à la conversation.
- Bruno95
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 72
- Remerciements reçus 2
il y a 6 mois 3 semaines - il y a 6 mois 3 semaines #34217
par Bruno95
Réponse de Bruno95 sur le sujet Creation d'objets dans un Foreach
Bonjour,
Voila ou j' en suis..., il me faut maintenant mettre des Add-click ou On-click sur les boutons.
N'hesitez pas a corriger ma facon de faire
Bonne journée
Voila ou j' en suis..., il me faut maintenant mettre des Add-click ou On-click sur les boutons.
N'hesitez pas a corriger ma facon de faire
Bonne journée
Pièces jointes :
Dernière édition: il y a 6 mois 3 semaines par Bruno95.
Connexion ou Créer un compte pour participer à la conversation.
- Fabien
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 142
- Remerciements reçus 21
il y a 6 mois 2 semaines #34224
par Fabien
Réponse de Fabien sur le sujet Creation d'objets dans un Foreach
Bonjour Bruno.
Dans ton exemple, il suffit d'intégrer dans la boucle Foreach l'action au clic sur le bouton.
L'inconvénient est que tu auras la même action pour chaque bouton.
Pour réaliser des interfaces graphiques avec Powershell, je te conseille fortement le WPF.
Tu auras l'avantage d'avoir des interfaces graphiques dynamiques et beaucoup plus sympa.
Fabien
Dans ton exemple, il suffit d'intégrer dans la boucle Foreach l'action au clic sur le bouton.
L'inconvénient est que tu auras la même action pour chaque bouton.
Set-StrictMode -Version 2.0
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
#Tableau des noms de boutons
$buttonarray = '$Button1A', '$Button1B', '$Button1C'
#FONCTIONS
#----------
#Creation des boutons
function fNew-Button {
#Colonne de depart
[int]$col = 21
foreach ($button in $buttonarray) {
$col
$button
$button = New-Object System.Windows.Forms.Button
$button.location = New-Object System.Drawing.Point($col,29)
$button.Size = New-Object System.Drawing.Size(60,60)
$button.Add_Click({ Write-Host "Click"})
$page.controls.Add($button)
$col += 59
}
}
#MISE EN FORME
#--------------
$page = New-Object System.Windows.Forms.Form
$page.FormBorderStyle = 3 #fenêtre à taille fixe
$page.Maximizebox = $false
$page.size = New-Object System.Drawing.Size(1860,1020)
$page.StartPosition = 'CenterScreen'
$page.Text = 'LA FENETRE'
$page.BackColor = 'black'
$fenetrejoueur = New-Object System.Windows.Forms.GroupBox
$fenetrejoueur.Location = New-Object System.Drawing.Point(20,22)
$fenetrejoueur.Width = 888
$fenetrejoueur.Height = 900
$fenetreordinateur = New-Object System.Windows.Forms.GroupBox
$fenetreordinateur.Location = New-Object System.Drawing.Point(946,22)
$fenetreordinateur.Width = 888
$fenetreordinateur.Height = 900
#Creation des boutons
fNew-Button
$page.controls.AddRange(@($fenetrejoueur,$fenetreordinateur))
#TRAITEMENT
#----------
#AFFICHAGE
#---------
$page.ShowDialog()
Pour réaliser des interfaces graphiques avec Powershell, je te conseille fortement le WPF.
Tu auras l'avantage d'avoir des interfaces graphiques dynamiques et beaucoup plus sympa.
Fabien
Connexion ou Créer un compte pour participer à la conversation.
- Fabien
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 142
- Remerciements reçus 21
il y a 6 mois 2 semaines #34225
par Fabien
Réponse de Fabien sur le sujet Creation d'objets dans un Foreach
Bruno,
Si tu veux voir ce que ça donne en WPF.
Voici un exemple de WPF en intégrant la création de bouton comme ton script.
Fabien
Si tu veux voir ce que ça donne en WPF.
Voici un exemple de WPF en intégrant la création de bouton comme ton script.
#Code XML de l'interface graphique WPF
[xml]$XAML = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Buttons"
Height="345"
Width="233"
ResizeMode="NoResize">
<Grid>
<StackPanel Name="StackButtonsHere" HorizontalAlignment="Left" Height="231" Margin="22,10,0,0" VerticalAlignment="Top" Width="170"/>
<Button Name="AddAButton" Content="Add Button" HorizontalAlignment="Left" Margin="22,277,0,0" VerticalAlignment="Top" Width="170"/>
<TextBox Name="ButtonName" HorizontalAlignment="Left" Height="23" Margin="48,249,0,0" TextWrapping="Wrap" Text="Button_Name" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
"@
#Chargement de l'assembly
[void][System.Reflection.Assembly]::LoadWithPartialName('PresentationFramework')
#Lecture du code XAML
$XAMLReader= New-Object System.Xml.XmlNodeReader $XAML
try{
$Form=[Windows.Markup.XamlReader]::Load($XAMLReader)
} catch {
Throw "Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed."
}
#===========================================================================
# Chargement de l'objet XAML dans PowerShell
#===========================================================================
# Convertir Name=* dans XML en Variable du meme nom
$XAML.SelectNodes("//*[@Name]") | % { Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)}
#===========================================================================
# Évenements
#===========================================================================
#Tableau des noms de boutons
$buttonarray = 'Button1A', 'Button1B', 'Button1C'
#FONCTIONS
#----------
#Creation des boutons
function fNew-Button {
#Boucle foreach
foreach ($i in $buttonarray) {
#Création du bouton
$button = New-Object System.Windows.Controls.Button
#Nom du bouton
$button.Name = $i
#Contenu du bouton
$button.Content = $i
#hauteur du bouton
$button.Height = 20
#Intégration du bouton dans le StackPanel
$StackButtonsHere.AddChild($button)
#Action au clic sur le bouton
$button.Add_Click({ Write-Host "Click"})
}
}
#Appel de la fonction
fNew-Button
#Action au clic sur le bouton "Add Button"
$AddAButton.Add_Click({
#Création du bouton
$NewButton = New-Object System.Windows.Controls.Button
#Nom du bouton
$NewButton.Name = $ButtonName.Text
#Contenu du bouton
$NewButton.Content = $ButtonName.Text
#hauteur du bouton
$NewButton.Height = 20
#Intégration du bouton dans le StackPanel
$StackButtonsHere.AddChild($NewButton)
#Action au clic sur le bouton
$NewButton.Add_Click({
#$Sender : Contient l’objet qui a généré cet événement
[System.Object]$Sender = $args[0]
#Affichage du nom du bouton dans la Textbox
$ButtonName.Text = $Sender.Name
})
})
#===========================================================================
# Affichage de la fenetre
#===========================================================================
$Form.ShowDialog() | Out-Null
Fabien
Connexion ou Créer un compte pour participer à la conversation.
- Bruno95
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 72
- Remerciements reçus 2
il y a 6 mois 2 semaines #34227
par Bruno95
Réponse de Bruno95 sur le sujet Creation d'objets dans un Foreach
Bonjour Fabien,
Tres content d' avoir eu des reponses, mais en plus des reponses interessantes .
Tu n' as pas l'air d'etre "la moitié d'un con"
C'est cool...
Concernant, ta reponse, pour mon script actuel, voila mon Add-click, et l' erreur obtenue:
#Creation des boutons
function fNew-Button {
#Colonne de depart
[int]$col = 21
[int]$line = 29
foreach ($button in $buttonarray) {
$button
$col
$line
if ($col -eq 906) {
$col = 21
$line += 59
}
$button = New-Object System.Windows.Forms.Button
$button.location = New-Object System.Drawing.Point($col,$line)
$button.Size = New-Object System.Drawing.Size(60,60)
$button.add_Click({
$button.BackColor = 'green'
})
$page.controls.Add($button)
$col += 59
$col
$line
}
}
Voici, l'erreur des que je clique:
Impossible d’extraire la variable « $button », car elle n’a pas été définie.
Au caractère D:\mesdocuments\powershell\script1.ps1:64 : 13
+ $button.BackColor = 'green'
+ ~~~~~~~
+ CategoryInfo : InvalidOperation : (button:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
Concernant WPF, je regarde ca de plus pret, je te tiens au courant...
Merci encore Fabien et bonne soirée.
Tres content d' avoir eu des reponses, mais en plus des reponses interessantes .
Tu n' as pas l'air d'etre "la moitié d'un con"
C'est cool...
Concernant, ta reponse, pour mon script actuel, voila mon Add-click, et l' erreur obtenue:
#Creation des boutons
function fNew-Button {
#Colonne de depart
[int]$col = 21
[int]$line = 29
foreach ($button in $buttonarray) {
$button
$col
$line
if ($col -eq 906) {
$col = 21
$line += 59
}
$button = New-Object System.Windows.Forms.Button
$button.location = New-Object System.Drawing.Point($col,$line)
$button.Size = New-Object System.Drawing.Size(60,60)
$button.add_Click({
$button.BackColor = 'green'
})
$page.controls.Add($button)
$col += 59
$col
$line
}
}
Voici, l'erreur des que je clique:
Impossible d’extraire la variable « $button », car elle n’a pas été définie.
Au caractère D:\mesdocuments\powershell\script1.ps1:64 : 13
+ $button.BackColor = 'green'
+ ~~~~~~~
+ CategoryInfo : InvalidOperation : (button:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
Concernant WPF, je regarde ca de plus pret, je te tiens au courant...
Merci encore Fabien et bonne soirée.
Les utilisateur(s) suivant ont remercié: Fabien
Connexion ou Créer un compte pour participer à la conversation.
- Bruno95
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 72
- Remerciements reçus 2
il y a 6 mois 2 semaines #34228
par Bruno95
Réponse de Bruno95 sur le sujet Creation d'objets dans un Foreach
Pour ne pas paraitre trop "con" , je faisais ce Add_click avant ta reponse, mais j'ai ce message...
Je suis vraiment "thanks", ca fait plaisir de pouvoir demander a quelq'un (sans l'emmerder, bien sur)
Je suis vraiment "thanks", ca fait plaisir de pouvoir demander a quelq'un (sans l'emmerder, bien sur)
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.127 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Creation d'objets dans un Foreach