2016-03-29 2 views
1

Моя текущая цель - создать функцию, которая может создавать $ ProgressBar1, $ ProgressBar2 и т. Д. Определяя имя как таковое и давая ему соответствующие определения ниже. Как размер и местоположение.Powershell итерации имя переменной в функции

Это для слишком сложного сценария Powershell с GUI, и я вызову список, заполненный любым количеством элементов, в Foreach {MakeBar}. Бары будут контролировать ход выполнения задачи.

$ counter = 0 в настоящее время определено на уровне скрипта.

function MakeBar 
{ 

New-Variable -Name "ProgressBar$script:counter" 

ProgressBar$script:counter = New-Object 'System.Windows.Forms.ProgressBar' 
$loc = ((23 * $script:counter) + 12) 
ProgressBar$script:counter.Location = '94, $loc' 
ProgressBar$script:counter.Name = 'progressbar1' 
ProgressBar$script:counter.Size = '1109, 23' 
ProgressBar$script:counter.TabIndex = 1 
$script:counter++ 
} 

Я был предупрежден об изменении вещи за пределами текущей области, но я не знаю, как еще или как лучше сделать это в Powershell.

+2

'MakeBar'should * return * a' System.Windows.Forms.ProgressBar', который можно сохранить в массиве/списке вместо использования счетчиков переменных. –

+0

вы также можете использовать хеш-таблицу для хранения нескольких индикаторов выполнения. '$ bars = @ {'Progress1' = {<#MakeBar#>}; 'Progress2' = {<#MakeBar#>}} ' –

ответ

1

Я бы рекомендовал иметь функцию создать индикатор выполнения в соответствии с параметрами, передаваемыми в него (обратите внимание, что вы должны использовать двойные кавычки, если вы хотите, переменные расширенный в строках):

function New-ProgressBar([int]$index) { 
    $bar = New-Object Windows.Forms.ProgressBar 
    $loc = (23 * $index) + 12 
    $bar.Location = "94, $loc" 
    $bar.Name = "progressbar$index" 
    $bar:counter.Size = '1109, 23' 
    $bar.TabIndex = $index 

    return $bar 
} 

и делать все счетчик обработка и присвоения переменных в цикле, где вы вызываете функцию (?):

$counter = 0 
foreach (...) { 
    New-Variable -Name "ProgressBar$counter" -Value (New-ProgressBar $counter) 
    $counter++ 
} 

Лично я предпочел бы положить бруски прогресса в хэш-таблицу, а не отдельные переменных, хотя:

$counter = 0 
$progress = @{} 
foreach (...) { 
    $progress["Bar$counter"] = New-ProgressBar $counter 
    $counter++ 
} 
Смежные вопросы