Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Powershell中将键盘焦点设置为文本框_Powershell - Fatal编程技术网

如何在Powershell中将键盘焦点设置为文本框

如何在Powershell中将键盘焦点设置为文本框,powershell,Powershell,我想了解如何在powershell中自动将键盘焦点设置为文本框 我有一个脚本,要求用户从下拉菜单中选择一个选项,然后根据该选项,他们必须输入某些参数。一切正常 为了便于使用,我希望每次显示新的输入框时,键盘的焦点都转移到输入框,这样用户就不必一直单击输入框来输入文本 到目前为止,我的代码是: function inputBox($parameter) { $objForm = New-Object System.Windows.Forms.Form $objForm.Text = $param

我想了解如何在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
有什么想法吗


谢谢

如果Ficus不工作,请尝试选择方法:

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

下面是您的代码,我可以在其中找到一个下拉菜单,以便在显示我已完成的表单时将焦点放在文本框上:

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

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

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

工作很好,但是我需要使
paramValue
变量脚本全局化(
Add\u Click
例程中的范围不是脚本范围,并且
paramValue
设置丢失)。使用
$Global:paramValue
对我有效。

这是@CB和@Shay Levy的答案的替代方案(他们都不适用于我):


对我来说也很好。:-)并非所有英雄都戴斗篷。唯一有效的。谢谢。虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决这个问题的附加上下文将提高答案的长期价值。请随意回答,为他人添加更多解释。谢谢如果
中缺少
}
$objForm.Add_Shown( { $objTextBox.Select() })