Seleccionar elementos de un cuadro de lista

Este ejemplo solo se aplica a las plataformas Windows.

Use Windows PowerShell 3.0 (y versiones posteriores) para crear un cuadro de diálogo donde los usuarios puedan seleccionar elementos de un control de cuadro de lista.

Crear un control de cuadro de lista y seleccionar elementos en él

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 = 'Select a Computer'
$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 select a computer:'
$form.Controls.Add($label)

$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 80

[void] $listBox.Items.Add('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')

$form.Controls.Add($listBox)

$form.Topmost = $true

$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItem
    $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.

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

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 = 'Select a Computer'
$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. En este caso, lo que se pretende es que los usuarios seleccionen un equipo.

$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 select a computer:'
$form.Controls.Add($label)

Agregue el control (en este caso, un cuadro de lista) que permita a los usuarios proporcionar la información descrita en el texto de etiqueta. Aparte de los cuadros de lista, hay otros muchos controles que se pueden aplicar; para conocerlos, vea el tema sobre el espacio de nombres System.Windows.Forms.

$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 80

En la sección siguiente, hay que especificar los valores que quiere que el cuadro de lista muestre a los usuarios.

Nota

El cuadro de lista creado con este script solo permite realizar una selección. Para crear un control de cuadro de lista que permita selecciones múltiples, especifique un valor para la propiedad SelectionMode, como aquí: $listBox.SelectionMode = 'MultiExtended'. Para más información, consulte Cuadros de lista de selección múltiple.

[void] $listBox.Items.Add('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')

Agregue el control de cuadro de lista al formulario e indique a Windows que, cuando el formulario se abra, lo haga encima del resto de ventanas y cuadros de diálogo abiertos.

$form.Controls.Add($listBox)
$form.Topmost = $true

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 seleccionen una opción en el cuadro de lista y hagan clic en Aceptar o presionen la tecla Entrar.

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

Consulte también