4

PowerShell のテキスト ボックスにキーボード フォーカスを自動的に設定する方法を探しています。

ユーザーにドロップダウンメニューからオプションを選択するように求めるスクリプトがあり、その選択に基づいて、特定のパラメーターを入力する必要があります。それはすべてうまくいきます。

使いやすさのために、新しいボックスが表示されるたびにキーボードのフォーカスを入力ボックスに移動して、ユーザーがテキストを入力するためにクリックし続ける必要がないようにしたいと考えています。

これまでの私のコード:

function inputBox($parameter)
{
$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = $parameter
$objForm.Size = New-Object System.Drawing.Size(300,200) 
$objForm.StartPosition = "CenterScreen"

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
    {$paramValue=$objTextBox.Text;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
    {$objForm.Close()}})



$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,90)
$OKButton.Size = New-Object System.Drawing.Size(75,25)
$OKButton.Text = "OK"
$OKButton.Add_Click({$paramValue=$objTextBox.Text;$objForm.Close()})
$objForm.Controls.Add($OKButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20) 
$objLabel.Size = New-Object System.Drawing.Size(280,20) 
$objLabel.Text = $parameter
$objForm.Controls.Add($objLabel) 

$objTextBox = New-Object System.Windows.Forms.TextBox 
$objTextBox.Location = New-Object System.Drawing.Size(10,40) 
$objTextBox.Size = New-Object System.Drawing.Size(260,20) 
$objForm.KeyPreview = $True
$objForm.Controls.Add($objTextBox) 

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

return $paramValue

何か案は?

ありがとう!

4

6 に答える 6

9

ドロップダウンメニューを見つけることができるコードに従って、フォームが表示されたときにテキストボックスにフォーカスを与えます。

$objForm.Add_Shown({$objForm.Activate(); $objTextBox.focus()})
于 2012-07-16T09:09:21.007 に答える
2

うまくいかないSelect場合は、次の方法を試してください。Focus()

if($textbox.CanFocus)
{
   $textbox.Focus()
}
else
{
   $textbox.Select()
}
于 2012-07-16T09:08:31.540 に答える
0

paramValueうまく機能しますが、変数スクリプトをグローバルにする必要がありました(Add_Clickルーチン内のスコープはスクリプト スコープではなく、paramValue設定は失われます)。使用する$Global:paramValueとうまくいきました。

于 2019-05-06T10:14:02.897 に答える
0

これは、@CB と @Shay Levy の回答に代わるものです (どれもうまくいきませんでした)。

$objForm.Add_Shown( { $objTextBox.Select() })
于 2019-06-18T13:27:18.283 に答える