У меня есть этот код C # для перечисления элементов управления экземпляра формы:
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);
}
}
}
Здесь перечислены все имена элементов управления Form2 в TextBox. Это моя попытка воспроизвести этот код в 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
}
}
Но это не работает. $ form.Control кажется пустым, поэтому цикл foreach никогда не вводится. Как сделать так, чтобы вышеуказанный код C # работал в PowerShell?
[править 1]
Приведенный выше код, очевидно, имеет форму без элементов управления. Вот обновленный код PowerShell с формой, в которую Button добавлен в коллекцию Controls, но с (по-видимому) тем же результатом отсутствия перечисления коллекции 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
}
}
[править 2]
если я проверю тип $ свойства:
foreach($property in $properties)
{
$property.GetType().FullName
}
GetType () возвращает:
System.ComponentModel.PropertyDescriptorCollection
где я ожидал PropertyDescriptor.