Powershell CheckedListBox检查是否在字符串/数组中

时间:2014-01-08 22:53:44

标签: powershell checkedlistbox

我已经开始学习Powershell了,在花了几个小时解决问题后我现在陷入困境我可以找到除Powershell之外的多种语言的解决方案。

我需要对CheckedListBox中的每个项进行检查,该项匹配名为$MLBSVar_SelectedPackages的以分号分隔的字符串中的任何值。 (例如$MLBSVar_SelectedPackages = 'packageA;packageB;packageC;')等等。

我想出了这条线,但它还没有奏效。你能帮帮我吗?

if ($MLBSVar_SelectedPackages -ne $null) { 
    ForEach ($PackageName in $MLBSVar_SelectedPackages) { 
        ForEach ($item in $clb_SC_AvailablePackages.Items) { 
            if ($item -eq $PackageName) { 
                $clb_SC_AvailablePackages.Item($PackageName).Checked = $true 
            }
        }
    }
}

我也尝试.SetItemCheckState([System.Windows.Forms.CheckState]::Checked)代替.Checked。 (一)问题似乎是在最后一节中对列表项进行处理,因为它似乎是作为字符串而不是对象传递的?我有VBS背景,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是类似下面的代码。您可以使用SetItemChecked()类的CheckedListBox方法检查特定索引处的项目。我看到您尝试使用SetItemCheckState(),但未提及SetItemChecked()

# Import Windows Forms Assembly
Add-Type -AssemblyName System.Windows.Forms;
# Create a Form
$Form = New-Object -TypeName System.Windows.Forms.Form;
# Create a CheckedListBox
$CheckedListBox = New-Object -TypeName System.Windows.Forms.CheckedListBox;
# Add the CheckedListBox to the Form
$Form.Controls.Add($CheckedListBox);
# Widen the CheckedListBox
$CheckedListBox.Width = 350;
$CheckedListBox.Height = 200;
# Add 10 items to the CheckedListBox
$CheckedListBox.Items.AddRange(1..10);

# Clear all existing selections
$CheckedListBox.ClearSelected();
# Define a list of items we want to be checked
$MyArray = 1,2,5,8,9;

# For each item that we want to be checked ...
foreach ($Item in $MyArray) {
    # Check it ...
    $CheckedListBox.SetItemChecked($CheckedListBox.Items.IndexOf($Item), $true);
}

# Show the form
$Form.ShowDialog();

运行此代码后,您将看到一个类似于以下屏幕截图的对话框。

Windows Form