2016-12-25 2 views
0

У меня есть что-то вроде этого:PS Помощь в KeyDown и нажмите кнопку с функциями и хэш-таблицы

#initialize System.Drawing and System.Windows.Forms 
#$form = New-Object System.Windows.Forms.Form , $form.text, $form.Size etc 
#$listBox = New-Object System.Windows.Forms.ListBox , $listBox.Location etc 

$form.KeyPreview = $True 

$form.Add_KeyDown({if ($_.KeyCode -eq "Enter"){ 
#call func passing $item value to the currentItemSelected parameter of func 
$item=$listBox.SelectedItem;(Func -currentItemSelected $item)}}) 

$form.Add_KeyDown({if ($_.KeyCode -eq "Escape"){$form.Close()}}) 

$hashT1 = Get-Content -raw "path\hashT.txt" | ConvertFrom-StringData 
$hashT2 = Get-Content -raw "path\hashT2.txt" | ConvertFrom-StringData 

#arg is recieved from Btn.Add_Click(), btn1 clicked arg1 = $hashT1, btn2 = $hashT2 ... 
function PopList($arg1){ 
$listBox.Items.Clear() 
foreach ($game in $arg1.GetEnumerator() | sort Name){ 
$listBox.Items.Add("{0}" -f $game.Key)} 

##Function recieve $hashT1 or any table I state when I click a Button 
##and recieve the listbox.SelectedItem value when I press enter 
##Write-Host is just to check if the variables recieved the correct info 
function Func($currentHashT, $currentItemSelected){ 
Write-Host $currentHashT.$currentItemSelected} 

$btn1 = New-Object System.Windows.Forms.Button 
#{.location, .size, .text...} 
#PopList fill list with $hashT1 keys and Func $currentHashT should be $hashT1 'cause I'm 
#passing $hashT1 as argument 
$btn1.Add_Click({PopList $hashT1; Func -currentHashT $hashT1}) 
$form.Controls.Add($bt1) 

$btn2 = New-Object System.Windows.Forms.Button 
#{.location, .size, .text...} 
#PopList fill list with $hashT2 keys and Func $currentHashT should be $hashT2 'cause I'm 
#passing $hashT2 as argument 
$btn2.Add_Click({PopList $hashT2; Func -currentHashT $hashT2}) 
$form.Controls.Add($btn2) 

$form.Controls.Add($listBox) 
$form.Add_Shown({$form.Activate()}) 
[void] $form.ShowDialog() 

В результате я хочу, чтобы нажать на кнопку, заполнить свой список, выберите пункт и при нажатии ввода и писать -host мне ЗНАЧЕНИЕ КЛЮЧА, о котором я сказал, что хочу. Итак, если я нажму btn1, выберите элемент из списка и нажмите Enter, он будет записывать-значение VALUE из $ hashT1.'KEY 'например:
$ hashT1 = @ {"File 1" = "Path \ File1.bin «; «Файл 2» = «Путь \ Файл2.cue»}
щелкнул btn1, заполненный список с двумя строками, «Файл 1» и «Файл 2».
выберите любой из них, файл 2 пока.
нажал войти, он будет писать-хост: путь \ File2.cue

Что я получаю в результате:
«пустая строка», а затем выбранное значение элемента

Если я пишу мой Func для отложенной записи Host $ currentHashT.'File 2 'он работает
Если я напишу свой Func на Write-Host $ hashT1. $ CurrentItemSelected it DOES work
Но если я так сделаю, мне нужно будет сделать функцию для каждой кнопки Я хочу добавить, могу ли я сделать это так, как хочу? Использование переменных, которые меняются в соответствии с тем, что я хочу ...
Спасибо, что прочитал мой вопрос.

ответ

0

Проблема заключается не в том, что переменные изменяются значения, то проблема заключается в том, что вы пытаетесь вызвать функцию с двумя параметрами, как

function add ($a, $b) { 
    write-host ($a + $b) 
} 

add -a 4 

add -b 5 

и ожидая, что хоть как-то вызывать только функцию один раз, и печать 9. Это никогда не сработает.

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

function add($b) { 
    write-host ($firstNUm + $b) 
} 

$n = 4 
$firstNUm = $n 
add -b 5 

$n = 5 
$firstNUm = $n 
add -b 5 

В противном случае вам придется полностью переделать его.

+0

Да, я понял это вчера и уже переработал гораздо меньше сценария noob hah, ty. –

Смежные вопросы