Question
PB retour valeur fonction (Résolu)
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
- Messages : 88
- Remerciements reçus 0
J'ai un souci avec l'écriture d'une fonction dans un script.
Elle doit me retourner le nom d'un radioButton si il est coché!
J'ai d'abord testé comme çà:
[code:1]
function global:GetNomradioBTN {
$ListeRadioBTN=$gbxOptRapport.controls | foreach {if ($_.checked) {$NomRbtn=$_.name}}}
write-host $nomrbtn}
[/code:1]
OK, lors de l'appel par un bouton.Add_click,j'affiche bien le nom du Radiobutton si coché.
Par contre si je fais:
[code:1]
function global:GetNomradioBTN {
$ListeRadioBTN=$gbxOptRapport.controls | foreach {if ($_.checked) {$NomRbtn=$_.name}}}
return $nomrbtn}
[/code:1]
je n'obtiens rien lors de l'appel!
Merci pour votre aide!<br><br>Message édité par: Arnaud, à: 16/10/07 13:19
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
- Messages : 576
- Remerciements reçus 0
Sinon, dans ta fonction, je note quelques petites lacunes dans le raisonnement, à moins que ce soit volontaire:
* Tu affectes à la variable $ListeRadioBTN le résultat de la commande qui suit sur la même ligne. Mais cette commande ne retourne aucune valeur, donc on peut supposer que $ListeRadioBTN sera toujours vide. Cette variable ne sert donc à rien.
* A chaque passage dans la boucle foreach tu réaffectes le nom du contrôle à la variable $nomrbtn si ce contrôle a été \"checké\". Ca veut dire qu'au final, si plusieurs contrôles ont été \"checkés\", seul le dernier traité par la boucle sera fourni en retour.
Au final, si l'on suppose qu'un seul contrôle doit avoir été \"checké\", tu aurais pu simplifier ta fonction en écrivant simplement:
[code:1]
function getNomRadioBTN {
($gbxOptRapport.Controls | where {$_.Checked}).Name
}[/code:1]
Ou pour reprendre le raisonnement de ta fonction, à savoir récupérer le nom du dernier contrôle qui a été checké:
[code:1]
function getNomRadioBTN {
($gbxOptRapport.Controls | where {$_.Checked})[-1].Name
}[/code:1]
Cela dit, comme je doute que ces remarques résoudront ton problème, j'attends le reste de ton code pour comprendre ce qui ne marche pas.
Janel
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
- Messages : 88
- Remerciements reçus 0
Voila la suite!
[code:1][void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$gbxOptRapport = new-object System.Windows.Forms.GroupBox
$btnCHECKIT = new-object System.Windows.Forms.Button
$rbtnPDF = new-object System.Windows.Forms.RadioButton
$rbtnHTTP = new-object System.Windows.Forms.RadioButton
$rbtnXML = new-object System.Windows.Forms.RadioButton
$rbtnCSV = new-object System.Windows.Forms.RadioButton
#
#
# rbtnPDF
#
$rbtnPDF.AutoSize = $true
$rbtnPDF.Location = new-object System.Drawing.Point(9, 19)
$rbtnPDF.Name = \"rbtnPDF\"
$rbtnPDF.Size = new-object System.Drawing.Size(46, 17)
$rbtnPDF.TabIndex = 22
$rbtnPDF.TabStop = $true
$rbtnPDF.Text = \"PDF\"
#
# rbtnHTTP
#
$rbtnHTTP.AutoSize = $true
$rbtnHTTP.Location = new-object System.Drawing.Point(9, 42)
$rbtnHTTP.Name = \"rbtnHTTP\"
$rbtnHTTP.Size = new-object System.Drawing.Size(54, 17)
$rbtnHTTP.TabIndex = 23
$rbtnHTTP.TabStop = $true
$rbtnHTTP.Text = \"HTTP\"
$rbtnHTTP.UseVisualStyleBackColor = $true
#
# rbtnXML
#
$rbtnXML.AutoSize = $true
$rbtnXML.Location = new-object System.Drawing.Point(100, 42)
$rbtnXML.Name = \"rbtnXML\"
$rbtnXML.Size = new-object System.Drawing.Size(47, 17)
$rbtnXML.TabIndex = 24
$rbtnXML.TabStop = $true
$rbtnXML.Text = \"XML\"
$rbtnXML.UseVisualStyleBackColor = $true
#
# rbtnCSV
#
$rbtnCSV.AutoSize = $true
$rbtnCSV.Location = new-object System.Drawing.Point(101, 19)
$rbtnCSV.Name = \"rbtnCSV\"
$rbtnCSV.Size = new-object System.Drawing.Size(46, 17)
$rbtnCSV.TabIndex = 25
$rbtnCSV.TabStop = $true
$rbtnCSV.Text = \"CSV\"
$rbtnCSV.UseVisualStyleBackColor = $true
#
# gbxOptRapport
#
$gbxOptRapport.Controls.Add($rbtnHTTP)
$gbxOptRapport.Controls.Add($rbtnPDF)
$gbxOptRapport.Controls.Add($rbtnXML)
$gbxOptRapport.Controls.Add($rbtnCSV)
$gbxOptRapport.Location = new-object System.Drawing.Point(316, 506)
$gbxOptRapport.Name = \"gbxOptRapport\"
$gbxOptRapport.Size = new-object System.Drawing.Size(158, 68)
$gbxOptRapport.TabIndex = 28
$gbxOptRapport.TabStop = $false
$gbxOptRapport.Text = \"OPTIONS RAPPORT\"
#
## btnCHECKIT
#
$btnCHECKIT.Location = new-object System.Drawing.Point(6, 79)
$btnCHECKIT.Name = \"btnCHECKIT\"
$btnCHECKIT.Size = new-object System.Drawing.Size(146, 23)
$btnCHECKIT.TabIndex = 10
$btnCHECKIT.Text = \"Check-IT\"
$btnCHECKIT.UseVisualStyleBackColor = $true
$btnCheckIT.add_click({GetnomRadioBtn
write-host $nomrbtn})
#
function global:GetNomradioBTN {
$gbxOptRapport.controls | foreach {if ($_.checked) {$NomRbtn=$_.name}}
}
#
#
$CBMON = new-object System.Windows.Forms.form
# CBMON
#
$CBMON.ClientSize = new-object System.Drawing.Size(1000,600)
$CBMON.AutoSize = $True
$CBMON.Controls.Add($gbxOptRapport)
$CBMON.Controls.Add($btnCHECKIT)
$CBMON.Cursor = \"Hand\"
$CBMON.Name = \"CBMON\"
$CBMON.Text = \"test Groupbox\"
$CBMON.ShowDialog()
[/code:1]
C'est peut être un souci de portée!!
Merci Janel
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
- Messages : 88
- Remerciements reçus 0
SAlut,
Voila la suite!
[code:1][void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$gbxOptRapport = new-object System.Windows.Forms.GroupBox
$btnCHECKIT = new-object System.Windows.Forms.Button
$rbtnPDF = new-object System.Windows.Forms.RadioButton
$rbtnHTTP = new-object System.Windows.Forms.RadioButton
$rbtnXML = new-object System.Windows.Forms.RadioButton
$rbtnCSV = new-object System.Windows.Forms.RadioButton
#
#
# rbtnPDF
#
$rbtnPDF.AutoSize = $true
$rbtnPDF.Location = new-object System.Drawing.Point(9, 19)
$rbtnPDF.Name = \"rbtnPDF\"
$rbtnPDF.Size = new-object System.Drawing.Size(46, 17)
$rbtnPDF.TabIndex = 22
$rbtnPDF.TabStop = $true
$rbtnPDF.Text = \"PDF\"
#
# rbtnHTTP
#
$rbtnHTTP.AutoSize = $true
$rbtnHTTP.Location = new-object System.Drawing.Point(9, 42)
$rbtnHTTP.Name = \"rbtnHTTP\"
$rbtnHTTP.Size = new-object System.Drawing.Size(54, 17)
$rbtnHTTP.TabIndex = 23
$rbtnHTTP.TabStop = $true
$rbtnHTTP.Text = \"HTTP\"
$rbtnHTTP.UseVisualStyleBackColor = $true
#
# rbtnXML
#
$rbtnXML.AutoSize = $true
$rbtnXML.Location = new-object System.Drawing.Point(100, 42)
$rbtnXML.Name = \"rbtnXML\"
$rbtnXML.Size = new-object System.Drawing.Size(47, 17)
$rbtnXML.TabIndex = 24
$rbtnXML.TabStop = $true
$rbtnXML.Text = \"XML\"
$rbtnXML.UseVisualStyleBackColor = $true
#
# rbtnCSV
#
$rbtnCSV.AutoSize = $true
$rbtnCSV.Location = new-object System.Drawing.Point(101, 19)
$rbtnCSV.Name = \"rbtnCSV\"
$rbtnCSV.Size = new-object System.Drawing.Size(46, 17)
$rbtnCSV.TabIndex = 25
$rbtnCSV.TabStop = $true
$rbtnCSV.Text = \"CSV\"
$rbtnCSV.UseVisualStyleBackColor = $true
#
# gbxOptRapport
#
$gbxOptRapport.Controls.Add($rbtnHTTP)
$gbxOptRapport.Controls.Add($rbtnPDF)
$gbxOptRapport.Controls.Add($rbtnXML)
$gbxOptRapport.Controls.Add($rbtnCSV)
$gbxOptRapport.Location = new-object System.Drawing.Point(316, 506)
$gbxOptRapport.Name = \"gbxOptRapport\"
$gbxOptRapport.Size = new-object System.Drawing.Size(158, 68)
$gbxOptRapport.TabIndex = 28
$gbxOptRapport.TabStop = $false
$gbxOptRapport.Text = \"OPTIONS RAPPORT\"
#
## btnCHECKIT
#
$btnCHECKIT.Location = new-object System.Drawing.Point(6, 79)
$btnCHECKIT.Name = \"btnCHECKIT\"
$btnCHECKIT.Size = new-object System.Drawing.Size(146, 23)
$btnCHECKIT.TabIndex = 10
$btnCHECKIT.Text = \"Check-IT\"
$btnCHECKIT.UseVisualStyleBackColor = $true
$btnCheckIT.add_click({GetnomRadioBtn
write-host $nomrbtn})
#
function global:GetNomradioBTN {
$gbxOptRapport.controls | foreach {if ($_.checked) {$NomRbtn=$_.name}}
}
#
#
$CBMON = new-object System.Windows.Forms.form
# CBMON
#
$CBMON.ClientSize = new-object System.Drawing.Size(1000,600)
$CBMON.AutoSize = $True
$CBMON.Controls.Add($gbxOptRapport)
$CBMON.Controls.Add($btnCHECKIT)
$CBMON.Cursor = \"Hand\"
$CBMON.Name = \"CBMON\"
$CBMON.Text = \"test Groupbox\"
$CBMON.ShowDialog()
[/code:1]
C'est peut être un souci de portée!!
Merci Janel
En fait comme les radiobuttons sont dans un groupe boxe il n'y a qu'un seul checké à chaque fois.
Mais cela dit ton optimisation me va beaucoup mieux.
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
- Messages : 88
- Remerciements reçus 0
[code:1]$btnCheckIT.add_click({$NomRBTN=GetnomRadioBtn
if ($NomRBTN -eq $null) {}
else {write-host $NomRbtn}
})
#
function GetNomradioBTN {
($gbxOptRapport.controls | where {$_.checked}).name}[/code:1]
En fait on retourne la valeur de la fonction en faisant:
$variable = NomFonction
C'est cà?
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
- Messages : 576
- Remerciements reçus 0
Tant qu'on y est à optimiser le code, le code suivant n'est pas super top:
[code:1]if ($NomRBTN -eq $null) {}
else {write-host $NomRbtn}[/code:1]
Il suffisait d'écrire:
[code:1]if (!$NomRBTN -eq $null) {write-host $NomRBTN}[/code:1]
Le point d'exclamation est une négation. La commande ci-dessus veut donc dire: \"si $NomRBTN n'est pas égal à $null, alors écrire $NomRBTN\".
Janel
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- PB retour valeur fonction (Résolu)