从列表框中存储变量

时间:2018-02-02 09:58:49

标签: powershell listbox

我正在尝试收集用户输入并稍后在我的脚本中使用$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

2 个答案:

答案 0 :(得分:1)

根据您的回答,您只需要确保将结果返回到$contacttype变量。但是,您提供的代码并不完整,它没有包含启动$form的部分或添加确定按钮以触发确定结果。

这是一个完整的版本,我也参与了一个功能,以展示如何让它更可重复使用:

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

答案 1 :(得分:0)

{
    $contacttype = $listBox.SelectedItem
    $contacttype
}

要求关闭它。