Powershell 从列表框存储变量

Powershell 从列表框存储变量,powershell,listbox,Powershell,Listbox,我正在尝试收集用户输入,并在稍后的脚本中使用$contacttype将其存储。最初我使用的是简单的文本输入,但现在我尝试使用列表框来获取用户输入 最初我是这样做的: [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null $contacttype = [Microsoft.VisualBasic.Interaction]::InputBox("Enter the contact t

我正在尝试收集用户输入,并在稍后的脚本中使用
$contacttype
将其存储。最初我使用的是简单的文本输入,但现在我尝试使用列表框来获取用户输入

最初我是这样做的:

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
$contacttype = [Microsoft.VisualBasic.Interaction]::InputBox("Enter the contact type", " ")
但是,我现在正尝试将列表框与以下内容结合使用:

$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("VPN")
[void] $listBox.Items.Add("Phone")
[void] $listBox.Items.Add("E-mail")

$form.Controls.Add($listBox) 

$form.Topmost = $True

$result = $form.ShowDialog()

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

如何确保使用所选列表框项目的输出填充
$contacttype

根据您的回答,您只需确保将结果返回到
$contacttype
变量。但是,您提供的代码不完整,它没有包括启动
$form
的部分,也没有添加一个OK按钮来触发OK结果

这是一个完整的版本,我还将其移到了一个函数中,以展示如何使其更易于重用:

Function Invoke-ListForm {
    Param(
        [string[]] $ListItem
    )

    $Form = New-Object system.Windows.Forms.Form

    $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

    ForEach ($Item in $ListItem) {
        [void] $listBox.Items.Add($Item)
    }

    $listBox.Add_Click({ $listBox.SelectedItem })
    $Form.Controls.Add($listBox) 

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

    $Form.Topmost = $True
    $Result = $form.ShowDialog()

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

$ContactType = Invoke-ListForm VPN,Phone,E-mail
$ContactType

这不是c#code我将其排除在外,只是为了避免它成为大量代码,但感谢您添加到这一点。理解,但值得记住的是,如果您提供一个完整的/功能性的示例(您已尽可能少地制作),人们将更容易帮助您。这通常被称为MCVE:不知道,这是一个很好的观点,希望能在将来帮助那些有类似问题的人。