如何在Powershell中将键盘焦点设置为TextBox

时间:2012-07-16 08:56:10

标签: powershell

我正在寻找如何在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

有什么想法吗?

谢谢!

5 个答案:

答案 0 :(得分:7)

按照您的代码,我可以找到一个下拉菜单,在显示表单时将焦点放在文本框上我已经完成了:

$objForm.Add_Shown({$objForm.Activate(); $objTextBox.focus()})

答案 1 :(得分:1)

如果Ficus不起作用,请尝试使用Select方法:

if($textbox.CanFocus)
{
   $textbox.Focus()
else
{
   $textbox.Select()
}

答案 2 :(得分:0)

效果很好,但是我需要全局设置Add_Click变量脚本(paramValue例程中的作用域不是脚本作用域,并且$Global:paramValue设置丢失了)。使用{{1}}对我有用。

答案 3 :(得分:0)

这是@CB和@Shay Levy(他们都不为我工作)答案的替代方法:

$objForm.Add_Shown( { $objTextBox.Select() })

答案 4 :(得分:-1)

与原始帖子和FOCUS一起使用的代码是:

if ( $objTextBox.CanFocus )
{
$objTextBox.Focus()
}
else
{
$objTextBox.Select()
}