Question [Résolu]forms: comment obtenir toutes les méthodes

Plus d'informations
il y a 12 ans 3 mois #16454 par fabien
Bonsoir,

Peut-être qu'il est tard et que je suis trop fatigué mais malgré toutes mes recherches je n'arrive pas à comprendre comme récupérer les informations suivantes :

Example :
[code:1]
$btn = new-object System.Windows.Forms.Button
$btn.add_Click({
write-host \"click\"
})
[/code:1]

la fonction \"add_click\" sort d'où ?

Lorsque je fais un petit \"$btn | get-member\", cette fonction n'est pas présente. Je ne trouve rien dans msdn (mais je mis prend certainement mal), rien dans google, ... bref je suis perdu.

Comment faire pour récupérer toutes ces fonctions bien particulières ? (je suis en train me de m'amuser ou plutôt de me noyer avec du WPF/xaml/TreeView)

Merci pour votre aide !

Fabien

Message édité par: Phebus, à: 1/12/13 09:37<br><br>Message édité par: Phebus, à: 1/12/13 16:47

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

Plus d'informations
il y a 12 ans 3 mois #16455 par Laurent Dardenne
Salut,
Phebus écrit:

la fonction \&quot;add_click\&quot; sort d'où ?

Lors de la définition d'un événement public sur un objet, le compilateur ajoute deux méthodes :
Add_EventName et Remove _EventName :
[code:1]
add-type -AssemblyName System.Windows.Forms
$btn = new-object System.Windows.Forms.Button
$btn|gm -MemberType Event
$btn |gm -force -name *_click

$btn |
Get-member -MemberType Event|
Foreach {
$btn |gm -force -name \&quot;Add_$($_.Name)\&quot;,\&quot;Remove_$($_.Name)\&quot;
}
}
[/code:1]
La méthode add_Click permet d'ajouter un délégué à un évent.
On peut donc déclencher plusieurs traitements sur une occurence d'event :
[code:1]
# Chargement des assemblies externes
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Drawing\&quot;«»)


$BtnClose = new-object System.Windows.Forms.Button
#
# BtnClose
#
$BtnClose.DialogResult =[System.Windows.Forms.DialogResult]::OK
$BtnClose.Location = new-object System.Drawing.Point(88, 216)
$BtnClose.Name = \&quot;BtnClose\&quot;
$BtnClose.Size = new-object System.Drawing.Size(75, 23)
$BtnClose.TabIndex = 0
$BtnClose.Text = \&quot;&amp;Fermer\&quot;
$BtnClose.UseVisualStyleBackColor = $true
# function OnClick_BtnClose {
# [void][System.Windows.Forms.MessageBox]::«»Show(\&quot;L'évènement BtnClose.Add_Click n'est pas implémenté.\&quot;«»)
# }

function OnClick_BtnClose {
Write-Host \&quot;Composant Appelant : $($This.Name)\&quot;
Write-Host \&quot;paramètre : $_\&quot;
}

function OnClick_BtnClose2 {
Write-Warning \&quot;On ferme !\&quot;
}

$BtnClose.Add_Click( { OnClick_BtnClose } )
$BtnClose.Add_Click( { OnClick_BtnClose2 } )

#
$FrmMain = new-object System.Windows.Forms.form

#
$FrmMain.ClientSize = new-object System.Drawing.Size(284, 262)
$FrmMain.Controls.Add($BtnClose)
$FrmMain.Name = \&quot;BaseBtn\&quot;
$FrmMain.Text = \&quot;Form1\&quot;

$FrmMain.Add_Shown({$FrmMain.Activate()})
$ModalResult=$FrmMain.ShowDialog()

#Libération de la Form
$FrmMain.Dispose()
[/code:1]
Je n'ai pas le temps de démontrer la méthode Remove qui me semble délicate à coder en PS...<br><br>Message édité par: Laurent Dardenne, à: 1/12/13 14:29

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 3 mois #16456 par fabien
Un énorme merci !

Je découvre au passage l'argument force dans get-member.

Tout s'éclaire et je vais pouvoir bien dormir ce soir ^^

Bonne continuation.

Fabien

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

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