объект $ Button внутри foreach / как ссылаться на него, чтобы изменить цвет - PullRequest
1 голос
/ 10 июля 2020

Я создаю GUI с помощью foreach, Теперь ... могу сделать 16 кнопок, но пытаюсь немного автоматизировать сборку:

1,2,3,4 | foreach { $Button...}

все это работает, и я получаю 16 кнопок с правильными смещениями, но немного застряли, когда решили использовать задания внутри кнопок, пинги фонового задания, спящий режим, эхо-запросы - если не удается выполнить пинг, задание заканчивается, и на этом этапе я хочу, чтобы он изменил цвет кнопки

Поскольку все кнопки - "$ Button",

может ли каждая сгенерировать кнопку $ с другим номером в конце? ie $ Button1, $ Button2 ... и т. Д. c? попробовал $ Button $ _, но это не сработало

или какие-либо мысли о том, как ссылаться на кнопки, поэтому в зависимости от того, какое завершенное задание может изменить цвет этой кнопки?

Ура

@ Wasif_Hasan, это не сработало

$i=120
1..4 | Foreach {Set-Variable -Name "Button$($_)" -Value "Value"
$i=$i+70
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(150,$i)
$Button.Size = New-Object System.Drawing.Size(75,23)
$Button.Text = 'Cancel'+$_
$Button.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $Button
$form.Controls.Add($Button)
}
$Button3.Text = 'ok'+$_

Ошибка:

The property 'Text' cannot be found on this object. Verify that the property exists and can be set.

Код, который можно сохранить как .PS1 для проверки ...

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Select a Computer'
$form.Size = New-Object System.Drawing.Size(300,400)
$form.StartPosition = 'CenterScreen'

$i=10
1..4 | Foreach {Set-Variable -Name "Button$($_)" -Value "Value"
$i=$i+50
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(150,$i)
$Button.Size = New-Object System.Drawing.Size(75,23)
$Button.Text = "Number"+$_
$form.Controls.Add($Button)
}
$Button3.Text = "Test"
$result = $form.ShowDialog()

Ошибка:

The property 'Text' cannot be found on this object. Verify that the property 
exists and can be set.
At line:19 char:1
+ $Button3.Text = "Test"
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException

Решение, спасибо Wasif_Hasan!

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Select a Computer'
$form.Size = New-Object System.Drawing.Size(300,400)
$form.StartPosition = 'CenterScreen'
$Button=1,2,3,4
$i=10

$k=1
1,2,3,4 | Foreach {
$i=$i+50


    New-Variable "Button$_" -Value $(new-object System.Windows.Forms.Button -Property @{
        Name = 'Dvar'
        Location = New-Object System.Drawing.Size(10,$i)
        Size = New-Object System.Drawing.Size(75,23)
        Text = $_
    })

    $form.Controls.Add($(Get-Variable "Button$_" -ValueOnly))


$k=$k++
}
$Button2.Text="Hello"
$result = $form.ShowDialog()
$k=5
Remove-Variable Button*
$form.ActiveControl.Text

Результат: 1 Привет 2 3

1 Ответ

3 голосов
/ 10 июля 2020

Да, для их установки используйте это:

1..4 | Foreach {Set-Variable -Name "Button$($_)" -Value "Value"}

И вы также можете получить такие значения, как:

1..4 | Foreach {(Get-Variable -Name "Button$($_)").Value}

Все будет создано как $ Button1, $ Button2 et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...