Как разрешить Ctrl+A выбирать все в текстовом поле Windows Form (powershell)

Я пишу скрипт .ps1 с графическим интерфейсом Windows Forms. Когда я запускаю его из Powershell ISE, он позволяет использовать Ctrl + A, чтобы «выбрать все» в текстовом поле. Однако при запуске .ps1 вне ISE действие CTRL+A ничего не делает.

Любая идея, какие настройки я могу изменить в текстовом поле, чтобы разрешить Ctrl + A? Единственные темы, которые я смог найти по этой теме, касались написания на других языках, таких как C.

На данный момент что у меня есть:

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(110,20)
$textbox.Add_KeyDown({
    if ($_.KeyCode -eq "Enter") {$okButton.PerformClick()}
    })
**$textbox.acceptstab = $true
$textbox.shortcutsenabled = $True**
$form.Controls.Add($textBox)

person ISDboi    schedule 02.10.2020    source источник


Ответы (2)


Я могу воспроизвести вашу проблему здесь.

Один из вариантов — включить этот ответ — https://stackoverflow.com/a/29957334/3156906 — и вызвать Application.EnableVisualStyles().

Затем ваш пример становится (с дополнительным битом кода настройки, чтобы сделать его автономным):

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

[System.Windows.Forms.Application]::EnableVisualStyles()

$form = new-object System.Windows.Forms.Form

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(110,20)
$textbox.Add_KeyDown({
    if ($_.KeyCode -eq "Enter") {$okButton.PerformClick()}
    })
#$textbox.acceptstab = $true
#$textbox.ShortcutsEnabled = $true

$form.Controls.Add($textBox)

$form.ShowDialog()

Затем вы можете использовать Ctrl+A в текстовом поле, чтобы выделить текст.

person mclayton    schedule 02.10.2020

Вы можете вручную написать событие Ctrl+A для выбора содержимого текстового поля:

$textbox.Add_KeyDown({
  if (($_.Control) -and ($_.KeyCode -eq 'A')) {
     $textbox.SelectAll()
  }
})
person crisc2000    schedule 04.12.2020