Нужно создавать, использовать и хранить динамические имена объектов в Powershell - PullRequest
0 голосов
/ 02 июля 2018

Я загружаю текстовый файл, перебираю каждую строку и пытаюсь напечатать флажок в форме powershell. Однако, как показано ниже, все флажки имеют одинаковое имя переменной / объекта, что делает невозможным их разделение.

Мне нужен способ динамически создавать $ checkbox0 через $ checkbox (количество строк в текстовом файле, которые можно изменить) и заполнять их ниже, а также сохранять имена, чтобы я мог проверить, если они будут нажаты позже

$pFile = Get-Content "C:\results.txt"
$rowCounter = 0
foreach($line in $pFile){
    $checkbox = New-Object System.Windows.Forms.CheckBox
    $checkbox.UseVisualStyleBackColor = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $checkbox.AutoSize = "true"
    $checkbox.TabIndex = $rowCounter
    $checkbox.Text = $line
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 25
    $yValue = (20 * $rowCounter)
    $System_Drawing_Point.Y = $yValue
    $checkbox.Location = $System_Drawing_Point
    $checkbox.DataBindings.DefaultDataSourceUpdateMode = 0
    $Form1.Controls.Add($checkbox)
    $rowCounter = $rowCounter + 1
}

1 Ответ

0 голосов
/ 02 июля 2018

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...