Can someone kindly show me how to create a listbox where I can select
multiple selections and pass them to a variable? I can't seem to find an
example of this anywhere using powershell.
thanks,
I used Jeffery Snover's get-guiinput.ps1 script and added the listbox code:
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
###############################
# Create the form
$form = New-Object System.Windows.Forms.Form
$form.add_shown({$form.Activate()})
$form.Text = "PowerShell GUI Input"
$form.height = 110
###############################
# Create the OK button and when the OK button is clicked hide the form
$OK = new-object system.windows.forms.button
$OK.Text = "OK"
$OK.dock = "bottom"
$OK.Add_Click({
$form.hide()
})
$lb = new-object System.Windows.Forms.ListBox
[void]$lb.Items.Add("powershell")
[void]$lb.Items.Add("rocks!")
###############################
# add the controls to the form
$form.Controls.AddRange(@($lb,$OK))
###############################
# show the form
$results = $form.showdialog()
# show the results
$lb.SelectedItem
$lb.SelectedIndex
write-host "SelectedItem=$SelectedItem"
write-host "SelectedIndex=$SelectedIndex"
$form.dispose()
-----
Shay Levi
$cript Fanatic
http://scriptolog.blogspot.com
Hebrew weblog: http://blogs.microsoft.co.il/blogs/scriptfanatic
regards,
Anatoli
Add this line after $lb the declaration:
$lb.SelectionMode = [System.Windows.Forms.SelectionMode]::MultiSimple
or
$lb.SelectionMode = [System.Windows.Forms.SelectionMode]::MultiExtended
Then call
$lb.SelectedItems
From MSDN
The SelectionMode property enables you to determine how many items in the
ListBox a user can select at one time and how the user can make multiple-selections.
When the SelectionMode property is set to SelectionMode.MultiExtended, pressing
SHIFT and clicking the mouse or pressing SHIFT and one of the arrow keys
(UP ARROW, DOWN ARROW, LEFT ARROW, and RIGHT ARROW) extends the selection
from the previously selected item to the current item. Pressing CTRL and
clicking the mouse selects or deselects an item in the list. When the property
is set to SelectionMode.MultiSimple, a mouse click or pressing the SPACEBAR
selects or deselects an item in the list.
I'll have to check for the drop down list tommorow, my wife wants to watch
a movie now :-)
You can find more information here:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.listbox_properties.aspx
-----
Shay Levi
$cript Fanatic
http://scriptolog.blogspot.com
Hebrew weblog: http://blogs.microsoft.co.il/blogs/scriptfanatic
> Thanks Shay, is there a way to change this around to be a drop down
Hi Anatoli,
I've written a blog post detailing how to do this (it requires a
snapin to do it cleanly):
http://www.nivot.org/2007/12/02/UsingWindowsFormsControlsInPowerShell1ListBox.aspx
It's also available on my PowerShellCommunity.org blog, available via:
http://oisin.powershell.com/
Hope this helps,
- Oisin / x0n
http://www.nivot.org
http://oisin.powershell.com
$lb = new-object System.Windows.Forms.ListBox
$lb.SelectionMode = [System.Windows.Forms.SelectionMode]::MultiExtended
[void]$lb.Items.Add("powershell")
[void]$lb.Items.Add("rocks!")
$lb.SetSelected(0,$true)
$lb.SetSelected(1,$true)
$form.Controls.AddRange(@($lb,$OK))
HTH
>>> m s")
here's a sample with a combo box, it works quite the same as ListBox
$cb = new-object System.Windows.Forms.ComboBox
[void]$cb.Items.Add("powershell")
[void]$cb.Items.Add("rocks!")
$form.Controls.AddRange(@($cb,$OK))
$results = $form.showdialog()
write-host "SelectedItem=$($cb.SelectedItem)"
write-host "SelectedIndex=$($cb.SelectedIndex)"
More info on MSDN:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.combobox.aspx
-----
Shay Levi
$cript Fanatic
http://scriptolog.blogspot.com
Hebrew weblog: http://blogs.microsoft.co.il/blogs/scriptfanatic
> Thanks Shay, is there a way to change this around to be a drop down
I'll make a general suggestion.
I've found it sometimes helps to design your form the way you like it, in
Visual Studio, - customize it according to taste - and then set about
converting the code in the associated form file to powershell code.
Hope that helps.
--
Jon