У меня есть форма PowerShell (версия 5.1) с различными наборами System.Windows.Forms
Все объекты в ней названы как-то общие, например $label1
, $label2
и т. Д., А также $textBox1
, $textBox2
и т. Д..
В настоящее время я создаю их по мере их появления в форме, например:
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object system.Windows.Forms.Form
$Form | ForEach-Object {
$_.Size = New-Object System.Drawing.Size(800,550)
$_.StartPosition = 'CenterScreen'
$_.Text = "Example Form Name"
$_.Topmost = $true
}
$label1 = New-Object System.Windows.Forms.Label
$label1 | ForEach-Object {
$_.Location = '10,10'
$_.Size = '156,20'
$_.Text = 'Dummy text part 1'
}
$textBox1 = New-Object System.Windows.Forms.TextBox
$textBox1 | ForEach-Object {
$_.Location = '166,8'
$_.Size = '100,20'
}
$label2 = New-Object System.Windows.Forms.Label
$label2 | ForEach-Object {
$_.Location = '267, 10'
$_.Size = '85,20'
$_.Text = 'Dummy text part 2'
}
$textBox2 = New-Object System.Windows.Forms.TextBox
$textBox2 | ForEach-Object {
$_.Location = '352,8'
$_.Size = '100,20'
}
#A lot more lines of similar code go here
$Form.Controls.Add($label1)
$Form.Controls.Add($textBox1)
$Form.Controls.Add($label2)
$Form.Controls.Add($textBox2)
$result = $Form.ShowDialog()
У меня есть несколько десятков этих объектов, которые я создаю и называюв соответствии с этой схемой, и я действительно хотел бы сохранить некоторые строки, создавая все их по одной строке каждая (например, все label
в одной строке, затем все textBox
в одной строке) или вминимум в одном методе / функции каждый.
Я попробовал это:
$label1, $label2, $label3 = New-Object System.Windows.Forms.Label
вместо объявления каждого $label
в отдельной строке в полной демонстрационной форме выше, но PowerShell, похоже, не работает так;он создает только $label1
(что само по себе странно; я ожидал бы, что он создаст только $label3
, если он будет работать только на одном из них), а PowerShell ISE выдает ошибку для объявлений свойств позже для $label2
и $label3
:
The property 'Location' cannot be found on this object. Verify that the property exists and can be set.
At <filepath>.ps1:43 char:5
+ $_.Location = '267, 10'
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
... и т. д.
Есть ли способ создания нескольких объектов одного и того же типа с инкрементным суффиксом все за один раз?вместо того, чтобы объявлять их по отдельности, или я застрял, написав их так, как я их получил в настоящее время?