从列表框中选择项Selecting Items from a List Box

本文内容

使用 Windows PowerShell 3.0 和更高版本创建一个对话框,从而允许用户从列表框控件中选择项。

创建一个列表框控件,并从中选择项Create a list box control, and select items from it

复制以下内容并将其粘贴到 Windows PowerShell ISE 中,然后将其另存为 Windows PowerShell 脚本 (.ps1)。

  1. Add-Type -AssemblyName System.Windows.Forms
  2. Add-Type -AssemblyName System.Drawing
  3. $form = New-Object System.Windows.Forms.Form
  4. $form.Text = 'Select a Computer'
  5. $form.Size = New-Object System.Drawing.Size(300,200)
  6. $form.StartPosition = 'CenterScreen'
  7. $OKButton = New-Object System.Windows.Forms.Button
  8. $OKButton.Location = New-Object System.Drawing.Point(75,120)
  9. $OKButton.Size = New-Object System.Drawing.Size(75,23)
  10. $OKButton.Text = 'OK'
  11. $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
  12. $form.AcceptButton = $OKButton
  13. $form.Controls.Add($OKButton)
  14. $CancelButton = New-Object System.Windows.Forms.Button
  15. $CancelButton.Location = New-Object System.Drawing.Point(150,120)
  16. $CancelButton.Size = New-Object System.Drawing.Size(75,23)
  17. $CancelButton.Text = 'Cancel'
  18. $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
  19. $form.CancelButton = $CancelButton
  20. $form.Controls.Add($CancelButton)
  21. $label = New-Object System.Windows.Forms.Label
  22. $label.Location = New-Object System.Drawing.Point(10,20)
  23. $label.Size = New-Object System.Drawing.Size(280,20)
  24. $label.Text = 'Please select a computer:'
  25. $form.Controls.Add($label)
  26. $listBox = New-Object System.Windows.Forms.ListBox
  27. $listBox.Location = New-Object System.Drawing.Point(10,40)
  28. $listBox.Size = New-Object System.Drawing.Size(260,20)
  29. $listBox.Height = 80
  30. [void] $listBox.Items.Add('atl-dc-001')
  31. [void] $listBox.Items.Add('atl-dc-002')
  32. [void] $listBox.Items.Add('atl-dc-003')
  33. [void] $listBox.Items.Add('atl-dc-004')
  34. [void] $listBox.Items.Add('atl-dc-005')
  35. [void] $listBox.Items.Add('atl-dc-006')
  36. [void] $listBox.Items.Add('atl-dc-007')
  37. $form.Controls.Add($listBox)
  38. $form.Topmost = $true
  39. $result = $form.ShowDialog()
  40. if ($result -eq [System.Windows.Forms.DialogResult]::OK)
  41. {
  42. $x = $listBox.SelectedItem
  43. $x
  44. }

该脚本首先加载两个 .NET Framework 类:System.DrawingSystem.Windows.Forms然后,启动 .NET Framework 类 System.Windows.Forms.Form 的新实例;它提供一个可以开始添加控件的空白窗体或窗口。

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

在创建 Form 类的实例后,为此类的三个属性赋值。

  • 文本。这将成为该窗口的标题。

  • 大小。这是窗体的大小(以像素为单位)。上述脚本创建的窗体大小为宽 300 像素、高 200 像素。

  • StartingPosition。在上述脚本中,此可选属性将设置为 CenterScreen。如果未添加此属性,Windows 将在窗体打开时选择一个位置。通过将 StartingPosition 设置为 CenterScreen,可使窗体在每次加载时都自动显示在屏幕中间。

  1. $form.Text = 'Select a Computer'
  2. $form.Size = New-Object System.Drawing.Size(300,200)
  3. $form.StartPosition = 'CenterScreen'

接下来,为窗体创建“确定”按钮。 指定“确定”按钮的大小和行为。在此示例中,按钮位置为距窗体上边缘 120 像素,距左边缘 75 像素。按钮高度为 23 像素,按钮长度为 75 像素。此脚本使用预定义的 Windows 窗体类型确定按钮行为。

  1. $OKButton = New-Object System.Windows.Forms.Button
  2. $OKButton.Location = New-Object System.Drawing.Point(75,120)
  3. $OKButton.Size = New-Object System.Drawing.Size(75,23)
  4. $OKButton.Text = 'OK'
  5. $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
  6. $form.AcceptButton = $OKButton
  7. $form.Controls.Add($OKButton)

采用相同方式创建“取消”按钮。“取消”按钮距窗口上边缘 120 像素,但距左边缘 150 像素。

  1. $CancelButton = New-Object System.Windows.Forms.Button
  2. $CancelButton.Location = New-Object System.Drawing.Point(150,120)
  3. $CancelButton.Size = New-Object System.Drawing.Size(75,23)
  4. $CancelButton.Text = 'Cancel'
  5. $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
  6. $form.CancelButton = $CancelButton
  7. $form.Controls.Add($CancelButton)

接下来,在窗口上提供标签文本,用于描述你希望用户提供的信息。在本例中,你希望用户选择一台计算机。

  1. $label = New-Object System.Windows.Forms.Label
  2. $label.Location = New-Object System.Drawing.Point(10,20)
  3. $label.Size = New-Object System.Drawing.Size(280,20)
  4. $label.Text = 'Please select a computer:'
  5. $form.Controls.Add($label)

添加控件(在本例中为列表框),从而让用户提供你在标签文本中描述的信息。除了文本框,你还可以应用许多其他控件;有关更多控件,请参阅 MSDN 上的 System.Windows.Forms 命名空间.aspx)。

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

在下一部分中,你可以指定希望列表框向用户显示的值。

备注

此脚本创建的列表框只允许进行单选。若要创建允许进行多选的列表框控件,请指定 SelectionMode 属性的值,类似于以下内容:$listBox.SelectionMode = 'MultiExtended'有关详细信息,请参阅多选列表框

  1. [void] $listBox.Items.Add('atl-dc-001')
  2. [void] $listBox.Items.Add('atl-dc-002')
  3. [void] $listBox.Items.Add('atl-dc-003')
  4. [void] $listBox.Items.Add('atl-dc-004')
  5. [void] $listBox.Items.Add('atl-dc-005')
  6. [void] $listBox.Items.Add('atl-dc-006')
  7. [void] $listBox.Items.Add('atl-dc-007')

将列表框控件添加到窗体中,并指示 Windows 在打开该窗体时,在其他窗口和对话框之上打开它。

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

添加以下代码行以在 Windows 中显示该窗体。

  1. $result = $form.ShowDialog()

最后,If 块内的代码指示在用户从列表框中选择某个选项,然后单击“确定”按钮或按“Enter”键后,Windows 应如何处理该窗体。

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

另请参阅See Also