У меня есть базовый WinForm, с которым я работаю. Я установил FormBorderStyle
как None
, и я использую событие KeyDown
на форме, чтобы проверить, нажата ли клавиша Escape, и если это так, она закрывает форму.Слушатель событий KeyDown, похоже, не работает, когда элементы кнопки добавляются в WinForm
Все работает отлично, пока я не добавлю кнопку. Похоже, что проблема заключается в том, что кнопка автоматически получает фокус во время выполнения, и, поскольку события регистрируются только для того, что элемент имеет фокус (кнопка не имеет прослушивателя KeyDown
- форма), она не закрывается, когда я нажимаю кнопку Клавиша Escape.
Я посмотрел на объект WinForm ([System.Windows.Forms.Form]
) и искал свойства и методы, относящиеся к фокусу, и большинство из них - get;
методов и bool
запросов. В идеале это сработает, если что-то вроде свойства $form.StartsWithFocus = $true
, но, к сожалению, из того, что я увидел, это не тот случай.
Щелчок снаружи кнопки, но все еще в пределах формы, похоже, не сфокусирован на форме.
Вот упрощенная версия моего WinForm. Это что-то мне не хватает?
[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
$form = New-Object Windows.Forms.Form
$form.StartPosition = 'CenterScreen'
$form.Add_KeyDown({
if($_.KeyCode -eq "Escape") {
$form.Close()
}
})
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
Это выше откроет небольшую форму в середине экрана. Если вы нажмете клавишу Escape, она закрывается. Просто.
Однако, когда я добавляю кнопку, она перестает работать.
[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
$form = New-Object Windows.Forms.Form
$form.Add_KeyDown({
if($_.KeyCode -eq "Escape") {
$form.Close()
}
})
$button = New-Object Windows.Forms.Button
$button.Location = '20,20'
$button.Size = '100,30'
$form.Controls.Add($button)
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
Если вы запустите это (см. Выше), нажатие клавиши Escape ничего не делает.
Итак, где это происходит не так?
Спасибо.
$ form.KeyPreview = $ true! Я знал, что это то, о чем я проглядывал. Это было именно так. У меня это есть на нескольких моих других инструментах и приложениях, но я забыл об этом. Благодаря! – Rincewind