Question PB retour valeur fonction (Résolu)

Plus d'informations
il y a 14 ans 3 mois #1111 par bordin
Bonjour,
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.

Plus d'informations
il y a 14 ans 3 mois #1114 par Jacques Barathon
Je ne vois pas de différence entre les deux, à part l'utilisation de return à la place de write-host. Tu peux nous poster la partie de ton script qui appelle la fonction et qui traite la valeur retournée, pour voir si c'est de là que vient le problème?

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é \&quot;checké\&quot;. Ca veut dire qu'au final, si plusieurs contrôles ont été \&quot;checkés\&quot;, 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é \&quot;checké\&quot;, 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.

Plus d'informations
il y a 14 ans 3 mois #1118 par bordin
Réponse de bordin sur le sujet Re:PB retour valeur fonction
SAlut,

Voila la suite!
[code:1][void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
$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 = \&quot;rbtnPDF\&quot;
$rbtnPDF.Size = new-object System.Drawing.Size(46, 17)
$rbtnPDF.TabIndex = 22
$rbtnPDF.TabStop = $true
$rbtnPDF.Text = \&quot;PDF\&quot;
#
# rbtnHTTP
#
$rbtnHTTP.AutoSize = $true
$rbtnHTTP.Location = new-object System.Drawing.Point(9, 42)
$rbtnHTTP.Name = \&quot;rbtnHTTP\&quot;
$rbtnHTTP.Size = new-object System.Drawing.Size(54, 17)
$rbtnHTTP.TabIndex = 23
$rbtnHTTP.TabStop = $true
$rbtnHTTP.Text = \&quot;HTTP\&quot;
$rbtnHTTP.UseVisualStyleBackColor = $true
#
# rbtnXML
#
$rbtnXML.AutoSize = $true
$rbtnXML.Location = new-object System.Drawing.Point(100, 42)
$rbtnXML.Name = \&quot;rbtnXML\&quot;
$rbtnXML.Size = new-object System.Drawing.Size(47, 17)
$rbtnXML.TabIndex = 24
$rbtnXML.TabStop = $true
$rbtnXML.Text = \&quot;XML\&quot;
$rbtnXML.UseVisualStyleBackColor = $true
#
# rbtnCSV
#
$rbtnCSV.AutoSize = $true
$rbtnCSV.Location = new-object System.Drawing.Point(101, 19)
$rbtnCSV.Name = \&quot;rbtnCSV\&quot;
$rbtnCSV.Size = new-object System.Drawing.Size(46, 17)
$rbtnCSV.TabIndex = 25
$rbtnCSV.TabStop = $true
$rbtnCSV.Text = \&quot;CSV\&quot;
$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 = \&quot;gbxOptRapport\&quot;
$gbxOptRapport.Size = new-object System.Drawing.Size(158, 68)
$gbxOptRapport.TabIndex = 28
$gbxOptRapport.TabStop = $false
$gbxOptRapport.Text = \&quot;OPTIONS RAPPORT\&quot;
#
## btnCHECKIT
#
$btnCHECKIT.Location = new-object System.Drawing.Point(6, 79)
$btnCHECKIT.Name = \&quot;btnCHECKIT\&quot;
$btnCHECKIT.Size = new-object System.Drawing.Size(146, 23)
$btnCHECKIT.TabIndex = 10
$btnCHECKIT.Text = \&quot;Check-IT\&quot;
$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 = \&quot;Hand\&quot;
$CBMON.Name = \&quot;CBMON\&quot;
$CBMON.Text = \&quot;test Groupbox\&quot;
$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.

Plus d'informations
il y a 14 ans 3 mois #1119 par bordin
Réponse de bordin sur le sujet Re:PB retour valeur fonction
camilleB écrit:

SAlut,

Voila la suite!
[code:1][void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
$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 = \&quot;rbtnPDF\&quot;
$rbtnPDF.Size = new-object System.Drawing.Size(46, 17)
$rbtnPDF.TabIndex = 22
$rbtnPDF.TabStop = $true
$rbtnPDF.Text = \&quot;PDF\&quot;
#
# rbtnHTTP
#
$rbtnHTTP.AutoSize = $true
$rbtnHTTP.Location = new-object System.Drawing.Point(9, 42)
$rbtnHTTP.Name = \&quot;rbtnHTTP\&quot;
$rbtnHTTP.Size = new-object System.Drawing.Size(54, 17)
$rbtnHTTP.TabIndex = 23
$rbtnHTTP.TabStop = $true
$rbtnHTTP.Text = \&quot;HTTP\&quot;
$rbtnHTTP.UseVisualStyleBackColor = $true
#
# rbtnXML
#
$rbtnXML.AutoSize = $true
$rbtnXML.Location = new-object System.Drawing.Point(100, 42)
$rbtnXML.Name = \&quot;rbtnXML\&quot;
$rbtnXML.Size = new-object System.Drawing.Size(47, 17)
$rbtnXML.TabIndex = 24
$rbtnXML.TabStop = $true
$rbtnXML.Text = \&quot;XML\&quot;
$rbtnXML.UseVisualStyleBackColor = $true
#
# rbtnCSV
#
$rbtnCSV.AutoSize = $true
$rbtnCSV.Location = new-object System.Drawing.Point(101, 19)
$rbtnCSV.Name = \&quot;rbtnCSV\&quot;
$rbtnCSV.Size = new-object System.Drawing.Size(46, 17)
$rbtnCSV.TabIndex = 25
$rbtnCSV.TabStop = $true
$rbtnCSV.Text = \&quot;CSV\&quot;
$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 = \&quot;gbxOptRapport\&quot;
$gbxOptRapport.Size = new-object System.Drawing.Size(158, 68)
$gbxOptRapport.TabIndex = 28
$gbxOptRapport.TabStop = $false
$gbxOptRapport.Text = \&quot;OPTIONS RAPPORT\&quot;
#
## btnCHECKIT
#
$btnCHECKIT.Location = new-object System.Drawing.Point(6, 79)
$btnCHECKIT.Name = \&quot;btnCHECKIT\&quot;
$btnCHECKIT.Size = new-object System.Drawing.Size(146, 23)
$btnCHECKIT.TabIndex = 10
$btnCHECKIT.Text = \&quot;Check-IT\&quot;
$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 = \&quot;Hand\&quot;
$CBMON.Name = \&quot;CBMON\&quot;
$CBMON.Text = \&quot;test Groupbox\&quot;
$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.

Plus d'informations
il y a 14 ans 3 mois #1120 par bordin
Réponse de bordin sur le sujet Re:PB retour valeur fonction
bonjour, je crois avoir trouvé!

[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.

Plus d'informations
il y a 14 ans 3 mois #1121 par Jacques Barathon
Tout à fait. Tu as trouvé. En effet, comme tu le soupçonnais, la variable $nomrbtn qui est utilisée dans la fonction n'est pas la même que la variable $nomrbtn que tu affiches dans le code associé au clic.

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: \&quot;si $NomRBTN n'est pas égal à $null, alors écrire $NomRBTN\&quot;.

Janel

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

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