我已经开始学习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背景,非常感谢您的帮助。
答案 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();
运行此代码后,您将看到一个类似于以下屏幕截图的对话框。