Control
имеет свойство Name
, которое является строкой. Присвоив уникальное имя элементу управления, его можно найти позже в коллекции Controls
родительского элемента управления.
Также, если вы правильно назначите обработчик события для элемента управления, вы можете получить элемент управления в параметре sender обработчика события.
В следующем коде я создал список CheckBox
элементов управления и обрабатывает их CheckedChanged
событие для них:
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$flp = New-Object System.Windows.Forms.FlowLayoutPanel
$form.Controls.Add($flp)
#Let's say you read the following values from file
$array = ("Lorem", "Ipsum", "Dolor")
$i = 0
$array | % {
$checkBox = New-Object System.Windows.Forms.CheckBox
$checkBox.Text = $_
$checkBox.Name = "checkBox_$i"
$flp.Controls.Add($checkBox)
$checkBox.Add_CheckedChanged({
$index = $flp.Controls.IndexOf($this)
$name = $this.Name
$text = $this.Text
$value = $this.Checked
[System.Windows.Forms.MessageBox]::Show("Index: $index" +"`n" +
"Name: $name" + "`n" +
"Text: $text" + "`n" +
"Value: $value" + "`n")
})
$i++
}
$form.ShowDialog()
$form.Dispose()