#powershell
#powershell
Вопрос:
Я новичок в мире программирования, и я пытаюсь создать форму, используя функции для создания кнопок, меток и т. Д. Форма создается с тем исключением, что функции, переданные в события нажатия кнопки, передаются неправильно. Например, у меня есть функция для создания кнопки….
function new_btn ($name, $parent, $x, $y, $l, $h, $text, $onClick){
$object = New-Object System.Windows.Forms.Button
$object.Location = New-Object System.Drawing.Point($x, $y)
$Object.Size = New-Object System.Drawing.Size($l, $h)
$Object.Text = $text
$object.add_Click({$onClick})
New-Variable $name -Value $object -Scope global
(Get-Variable $parent).Value.Controls.Add((Get-Variable $name).value)
}
Затем у меня есть функция, которую я хочу запустить при нажатии кнопки…..
function msg {
[System.Windows.Forms.MessageBox]::Show("We are proceeding with next step.")
}
Затем я вызываю функцию и передаю ей параметры…….
new_btn getdbslist tab1 20 50 69 23 «Получить сообщение базы данных»
Это создает кнопку, как и ожидалось, и добавляет ее в tab1, но событие on click не будет работать, вообще ничего не происходит. Любая помощь была бы очень признательна!
Ответ №1:
Вы просто передаете строку. Вместо этого передайте блок сценария:
new_btn getdbslist tab1 20 50 69 23 'Get DBs' {
[System.Windows.Forms.MessageBox]::Show("We are proceeding with next step.")
}
И в вашей new_btn
функции вам, вероятно, просто нужно использовать
$object.add_Click($onClick)
Если вы действительно хотите передать строку, то вам, вероятно, нужно использовать следующее:
$object.add_Click({ amp; $onClick })
Комментарии:
1. Примечание: ваше именование функций здесь вызывает сомнения.
New-Button
было бы гораздо более значимым именем, хотя затем оно должно возвращать новый экземпляр, а не просто добавлять что-то к другому объекту.Add-Button
Вероятно, это было бы предпочтительнее. И как только вы пойдете по этому пути, вам, вероятно, следует также использовать имена параметров PascalCase и, возможно, использовать префикс для имени вашей функции, чтобы избежать столкновений с другими модулями.2. Большое тебе спасибо, Джоуи, очень ценю такой быстрый ответ и подсказки по улучшению кода.