Reputation: 377
I just learned about powershell gui programming. The following code can be executed successfully, but the result of the execution is not the text of the item in the list.
like this:
@{Name=a1; Status=True}
@{Name=a2; Status=False}
I need to output the text of the item directly.
a1
a2
I tried a lot of methods but no results Thanks in advance
function Show-7_psf {
[void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
[void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
[System.Windows.Forms.Application]::EnableVisualStyles()
$form1 = New-Object 'System.Windows.Forms.Form'
$buttonOk = New-Object 'System.Windows.Forms.Button'
$checkedlistbox1 = New-Object 'System.Windows.Forms.CheckedListBox'
$InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'
$csvtxt = @'
Name,Status
a1,True
a2,False
a3,False
'@
$form1_Load = {
$csv = ConvertFrom-Csv $csvtxt
$checkedlistbox1.DataSource = [System.Collections.ArrayList]$csv
$checkedlistbox1.DisplayMember = 'Name'
for ($i = 0; $i -lt $checkedlistbox1.Items.Count; $i++)
{
$state = if ($checkedlistbox1.Items[$i].Status -eq 'True') { $true }
else { $false }
$checkedlistbox1.SetItemChecked($i, $state)
}
}
$buttonOk_Click = {
$checkedlistbox1.CheckedItems | Write-Host
}
$Form_StateCorrection_Load=
{
#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
$Form_Cleanup_FormClosed=
{
#Remove all event handlers from the controls
try
{
$buttonOk.remove_Click($buttonOk_Click)
$form1.remove_Load($form1_Load)
$form1.remove_Load($Form_StateCorrection_Load)
$form1.remove_FormClosed($Form_Cleanup_FormClosed)
}
catch { Out-Null <# Prevent PSScriptAnalyzer warning #> }
}
$form1.SuspendLayout()
$form1.Controls.Add($buttonOk)
$form1.Controls.Add($checkedlistbox1)
$form1.AutoScaleDimensions = '6, 13'
$form1.AutoScaleMode = 'Font'
$form1.ClientSize = '482, 262'
$form1.Name = 'form1'
$form1.StartPosition = 'CenterScreen'
$form1.Text = 'Form'
$form1.add_Load($form1_Load)
$buttonOk.Location = '357, 199'
$buttonOk.Name = 'buttonOk'
$buttonOk.Size = '67, 25'
$buttonOk.TabIndex = 1
$buttonOk.Text = 'OK'
$buttonOk.UseCompatibleTextRendering = $True
$buttonOk.UseVisualStyleBackColor = $True
$buttonOk.add_Click($buttonOk_Click)
$checkedlistbox1.CheckOnClick = $True
$checkedlistbox1.FormattingEnabled = $True
$checkedlistbox1.Location = '49, 30'
$checkedlistbox1.Name = 'checkedlistbox1'
$checkedlistbox1.Size = '177, 184'
$checkedlistbox1.TabIndex = 0
$checkedlistbox1.UseCompatibleTextRendering = $True
$form1.ResumeLayout()
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($Form_StateCorrection_Load)
#Clean up the control events
$form1.add_FormClosed($Form_Cleanup_FormClosed)
#Show the Form
return $form1.ShowDialog()
}
Show-7_psf | Out-Null
Upvotes: 0
Views: 79
Reputation: 989
If you want any other property then replace with name
$buttonOk_Click = {
$checkedlistbox1.CheckedItems | Where-Object { $_."Name" | Write-Host }
}
Upvotes: 0
Reputation: 4020
Change this line
$checkedlistbox1.CheckedItems | Write-Host
To
$checkedlistbox1.CheckedItems.Name | Write-Host
This is because you are calling the object in the $csv
array but not selecting the Property
so you are returning the entire object in the array.
Upvotes: 1