Je possède ce code C# d'énumérer les contrôles d'une instance de formulaire:Formulaire Énumérer Contrôles
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
Form2 form2 = new Form2();
foreach (Control control in form2.Controls)
{
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(control);
foreach (PropertyDescriptor property in properties)
{
textBox1.Text += (property.Name + Environment.NewLine);
}
}
}
Cette liste tous les noms de commandes d'un Dialogue2 formulaire dans une zone de texte. C'est ma tentative de reproduire ce code dans PowerShell:
$form = New-Object System.Windows.Forms.Form
foreach($control in $form.Controls)
{
$properties =
[System.ComponentModel.TypeDescriptor]::GetProperties($control)
foreach($property in $properties)
{
$property.Name
}
}
Mais cela ne fonctionne pas. $ form.Control semble être vide, donc la boucle foreach n'est jamais entrée. Comment puis-je faire fonctionner le code C# ci-dessus dans PowerShell?
[modifier 1]
Le code ci-dessus a évidemment une forme sans contrôle sur elle. Ici est mis à jour le code PowerShell avec une forme qui a un bouton ajouté à ses contrôles collection, mais avec (apparemment) le même résultat de ne pas énumérer la collection Controls:
$form = New-Object System.Windows.Forms.Form
$button = New-Object System.Windows.Forms.Button
$form.Controls.Add($Button)
$form.Controls.Count
foreach($control in $form.Controls)
{
$properties =
[System.ComponentModel.TypeDescriptor]::GetProperties($control)
foreach($property in $properties)
{
$property.DisplayName
}
}
[modifier 2]
si i vérifier le type de propriété $:
foreach($property in $properties)
{
$property.GetType().FullName
}
GetType() retourne:
System.ComponentModel.PropertyDescriptorCollection
où je m'attendais à PropertyDescriptor.
Super! Merci beaucoup. –