Criando uma caixa de entrada personalizadaCreating a Custom Input Box

Script de uma caixa de entrada gráfica personalizada usando recursos de criação de formulário do Microsoft .NET Framework no Windows PowerShell 3.0 e versões posteriores.Script a graphical custom input box by using Microsoft .NET Framework form-building features in Windows PowerShell 3.0 and later releases.

Criar uma caixa de entrada gráfica personalizadaCreate a custom, graphical input box

Copie e cole o seguinte no Windows PowerShell ISE e salve-o como um script do Windows PowerShell (.ps1).Copy and then paste the following into Windows PowerShell ISE, and then save it as a Windows PowerShell script (.ps1).

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

$form = New-Object System.Windows.Forms.Form 
$form.Text = "Data Entry Form"
$form.Size = New-Object System.Drawing.Size(300,200) 
$form.StartPosition = "CenterScreen"

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20) 
$label.Size = New-Object System.Drawing.Size(280,20) 
$label.Text = "Please enter the information in the space below:"
$form.Controls.Add($label) 

$textBox = New-Object System.Windows.Forms.TextBox 
$textBox.Location = New-Object System.Drawing.Point(10,40) 
$textBox.Size = New-Object System.Drawing.Size(260,20) 
$form.Controls.Add($textBox) 

$form.Topmost = $True

$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}

O script começa carregando duas classes do .NET Framework: System.Drawing e System.Windows.Forms.The script begins by loading two .NET Framework classes: System.Drawing and System.Windows.Forms. Inicie uma nova instância da classe do .NET Framework System.Windows.Forms.Form, que fornece um formulário em branco ou janela ao qual você pode começar a adicionar controles.You then start a new instance of the .NET Framework class System.Windows.Forms.Form; that provides a blank form or window to which you can start adding controls.

$form = New-Object System.Windows.Forms.Form

Depois de criar uma instância da classe Form, atribua valores a três propriedades dessa classe.After you create an instance of the Form class, assign values to three properties of this class.

  • Text.Text. Isso se torna o título da janela.This becomes the title of the window.

  • Size.Size. Esse é o tamanho do formulário, em pixels.This is the size of the form, in pixels. O script anterior cria um formulário que possui 300 pixels de largura por 200 pixels de altura.The preceding script creates a form that’s 300 pixels wide by 200 pixels tall.

  • StartingPosition.StartingPosition. Esta propriedade opcional é definida para CenterScreen no script precedente.This optional property is set to CenterScreen in the preceding script. Se você não adicionar essa propriedade, o Windows seleciona um local quando o formulário aberto.If you don’t add this property, Windows selects a location when the form is opened. Ao configurar o StartingPosition para CenterScreen, você está exibindo automaticamente o formulário no meio da tela cada vez que ela é carregada.By setting the StartingPosition to CenterScreen, you’re automatically displaying the form in the middle of the screen each time it loads.

$form.Text = "Data Entry Form"
$form.Size = New-Object System.Drawing.Size(300,200) 
$form.StartPosition = "CenterScreen"

Em seguida, crie um botão OK para seu formulário.Next, create an OK button for your form. Especifique o tamanho e comportamento do botão OK.Specify the size and behavior of the OK button. Neste exemplo, a posição do botão é de 120 pixels a partir da borda superior do formulário e 75 pixels a partir da borda esquerda.In this example, the button position is 120 pixels from the form’s top edge, and 75 pixels from the left edge. A altura do botão é de 23 pixels, enquanto seu comprimento é de 75 pixels.The button height is 23 pixels, while the button length is 75 pixels. O script usa tipos predefinidos de formulários do Windows para determinar os comportamentos do botão.The script uses predefined Windows Forms types to determine the button behaviors.

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

Crie o botão Cancelar da mesma maneira.Similarly, you create a Cancel button. O botão Cancelar fica a 120 pixels da parte superior e 150 pixels da borda esquerda da janela.The Cancel button is 120 pixels from the top, but 150 pixels from the left edge of the window.

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

Em seguida, forneça o texto de rótulo na janela que descreve as informações que você deseja que os usuários forneçam.Next, provide label text on your window that describes the information you want users to provide.

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20) 
$label.Size = New-Object System.Drawing.Size(280,20) 
$label.Text = "Please enter the information in the space below:"
$form.Controls.Add($label)

Adicione o controle (no caso, uma caixa de texto) que permite que os usuários forneçam as informações descritas no texto do rótulo.Add the control (in this case, a text box) that lets users provide the information you’ve described in your label text. Há muitos outros controles que você pode aplicar além de caixas de texto. Para ver mais controles, consulte Namespace System.Windows.Forms no MSDN.There are many other controls you can apply besides text boxes; for more controls, see System.Windows.Forms Namespace on MSDN.

$textBox = New-Object System.Windows.Forms.TextBox 
$textBox.Location = New-Object System.Drawing.Point(10,40) 
$textBox.Size = New-Object System.Drawing.Size(260,20) 
$form.Controls.Add($textBox)

Defina a propriedade Topmost como $True para forçar a janela a abrir por cima de outras janelas e caixas de diálogo abertas.Set the Topmost property to $True to force the window to open atop other open windows and dialog boxes.

$form.Topmost = $True

Em seguida, adicione esta linha de código para ativar o formulário e defina o foco para a caixa de texto que você criou.Next, add this line of code to activate the form, and set the focus to the text box that you created.

$form.Add_Shown({$textBox.Select()})

Adicione a seguinte linha de código para exibir o formulário do Windows.Add the following line of code to display the form in Windows.

$result = $form.ShowDialog()

Por fim, o código dentro do bloco If instrui o Windows sobre o que fazer com o formulário depois que os usuários fornecem texto na caixa de texto e clicam no botão OK ou pressionam a tecla Enter.Finally, the code inside the If block instructs Windows what to do with the form after users provide text in the text box, and then click the OK button or press the Enter key.

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}

Consulte TambémSee Also