Criar uma caixa de entrada personalizada

Este exemplo só se aplica a plataformas Windows.

Crie scripts de uma caixa de entrada gráfica personalizada usando os recursos de criação de formulários do Microsoft .NET Framework no Windows PowerShell 3.0 e versões posteriores.

Criar uma caixa de entrada gráfica personalizada

Copie e cole o seguinte no Windows PowerShell ISE e salve-o como um arquivo de script (.ps1) do PowerShell.

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. Em seguida, inicie uma nova instância da classe do .NET Framework System.Windows.Forms.Form. Isso fornece um formulário em branco ou uma janela à qual você pode começar a adicionar controles.

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

Depois de criar uma instância da classe Form, atribua valores a três propriedades dessa classe.

  • Texto. Este torna-se o título da janela.
  • Tamanho. Este é o tamanho do formulário, em pixels. O script anterior cria um formulário com 300 pixels de largura por 200 pixels de altura.
  • StartingPosition. Esta propriedade opcional é definida como CenterScreen no script anterior. Se você não adicionar essa propriedade, o Windows selecionará um local quando o formulário for aberto. Ao definir StartingPosition como CenterScreen, você está exibindo automaticamente o formulário no meio da tela cada vez que ele é carregado.
$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 o formulário. Especifique o tamanho e o comportamento do botão OK . Neste exemplo, a posição do botão é de 120 pixels da borda superior do formulário e 75 pixels da borda esquerda. A altura do botão é de 23 pixels, enquanto o comprimento do botão é de 75 pixels. O script usa tipos predefinidos do Windows Forms para determinar os comportamentos dos botões.

$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)

Da mesma forma, você cria um botão Cancelar . O botão Cancelar está a 120 pixels da parte superior, mas a 150 pixels da borda esquerda da janela.

$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 um texto de rótulo na janela que descreva as informações que você deseja que os usuários forneçam.

$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 (neste caso, uma caixa de texto) que permite que os usuários forneçam as informações descritas no texto do rótulo. Há muitos outros controles que você pode aplicar além das caixas de texto. Para obter mais controles, consulte System.Windows.Forms Namespace.

$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 sobre outras janelas e caixas de diálogo abertas.

$form.Topmost = $true

Em seguida, adicione essa linha de código para ativar o formulário e defina o foco para a caixa de texto que você criou.

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

Adicione a seguinte linha de código para exibir o formulário no Windows.

$result = $form.ShowDialog()

Finalmente, 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, em seguida, clique no botão OK ou pressione a tecla Enter.

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

Consulte também