تعداد الضوابط شكل
-
30-09-2019 - |
سؤال
لدي رمز 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 في مربع نص. هذه هي محاولتي لإعادة إنتاج هذا الرمز في 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 مع نموذج يحتوي على زر يضاف إلى مجموعة عناصر التحكم الخاصة به ، ولكن مع (على ما يبدو) النتيجة نفسها لعدم تعداد مجموعة عناصر التحكم:
$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.
المحلول
تحتاج فقط إلى.
$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.GetEnumerator())
{
$property.DisplayName
}
}
نصائح أخرى
في رمز C# الخاص بك ، ربما يكون لديك فئة محددة على أنها Form2 التي لديها عناصر تحكم عليه. في PowerShell الخاص بك ، تقوم بتحميل نظام الفانيليا.