Crear un cuadro de entrada personalizado

Este ejemplo solo se aplica a las plataformas Windows.

Cree un script de un cuadro de entrada gráfico personalizado usando las características de creación de formularios de Microsoft .NET Framework de Windows PowerShell 3.0 (y versiones posteriores).

Crear un cuadro de entrada gráfico personalizado

Copie y pegue lo siguiente en Windows PowerShell ISE y, después, guárdelo como un archivo de script de Windows PowerShell (.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
}

El script comienza con la carga de dos clases de .NET Framework: System.Drawing y System.Windows.Forms. A continuación, inicie una nueva instancia de la clase System.Windows.Forms.Form de .NET Framework. De esta forma, tendrá una ventana o formulario en blanco donde puede empezar a agregar controles.

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

Después de crear una instancia de la clase Form, asigne valores a tres propiedades de esta clase.

  • Texto. Es el título de la ventana.
  • Tamaño Es el tamaño del formulario en píxeles. El script anterior crea un formulario de 300 píxeles de ancho y 200 píxeles de alto.
  • StartingPosition. Esta propiedad opcional está establecida en CenterScreen en el script anterior. Si no agrega esta propiedad, Windows selecciona una ubicación cuando el formulario se abre. Cuando StartingPosition se establece en CenterScreen, el formulario aparece automáticamente en el centro de la pantalla cada vez que se carga.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

A continuación, cree un botón Aceptar para el formulario. Indique un tamaño y el comportamiento del botón Aceptar. En este ejemplo, la posición del botón es de 120 píxeles desde el borde superior del formulario y de 75 píxeles desde el borde izquierdo. La altura del botón es 23 píxeles y la longitud, 75 píxeles. El script usa tipos predefinidos de Windows Forms para definir el comportamiento del botón.

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

De manera similar, cree un botón Cancelar. El botón Cancelar está a 120 píxeles de la parte superior, pero a 150 píxeles del borde izquierdo de la ventana.

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

A continuación, escriba texto de etiqueta en la ventana para describir la información que quiera que los usuarios proporcionen.

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

Agregue el control (en este caso, un cuadro de texto) que permita a los usuarios proporcionar la información descrita en el texto de etiqueta. Hay muchos otros controles que puede aplicar además de los cuadros de texto. Para más controles, consulte Espacio de nombres System.Windows.Forms.

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

Establezca la propiedad Topmost en $True para forzar que la ventana se abra encima del resto de ventanas y cuadros de diálogo abiertos.

$form.Topmost = $true

A continuación, agregue esta línea de código para activar el formulario y establezca el foco en el cuadro de texto que ha creado.

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

Agregue la siguiente línea de código para mostrar el formulario en Windows.

$result = $form.ShowDialog()

Por último, el código del bloque If indica a Windows qué hacer con el formulario después de que los usuarios proporcionen el texto en el cuadro de texto y hagan clic en Aceptar o presionen la tecla Entrar.

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

Consulte también