bugger
Goto Top

Powershell Button um Listbox einträge auszuwählen

Hallo,

ist es möglich Einträge in einer Listbox per extra Button auszuwählen? In einer langen Liste hätte man so einige abkürzungen. Beim Code unten sieht man vll. was ich meine face-smile

$x = @()

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")   

$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Data Entry Form"  
$objForm.Size = New-Object System.Drawing.Size(300,200) 
$objForm.StartPosition = "CenterScreen"  

$objForm.KeyPreview = $True

$objForm.Add_KeyDown({
    if ($_.KeyCode -eq "Enter") {  
        $script:x = $objListbox.SelectedItems
        $objForm.Close()
    }
})

$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")   
    {$objForm.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,320)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"  

$OKButton.Add_Click(
   {
       $script:x = $objListbox.SelectedItems
       $objForm.Close()
   })

$objForm.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,320)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"  
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20) 
$objLabel.Size = New-Object System.Drawing.Size(280,20) 
$objLabel.Text = "Please make a selection from the list below:"  
$objForm.Controls.Add($objLabel) 

$objListbox = New-Object System.Windows.Forms.Listbox 
$objListbox.Location = New-Object System.Drawing.Size(10,40) 
$objListbox.Size = New-Object System.Drawing.Size(260,20) 

$Font = New-Object System.Drawing.Font("Verdana",10,[System.Drawing.FontStyle]::Regular)  
# Font styles are: Regular, Bold, Italic, Underline, Strikeout
$objForm.Font = $Font
$objForm.AutoSize = $True
$objForm.AutoSizeMode = "GrowAndShrink"  

$objListbox.SelectionMode = "MultiExtended"  

$trennstriche = @('----------Test-Eintrag----------','','Test2')  

$objListBox.Items.AddRange(@(
"Item 1"  
"Item 2"  
"Item 3"  
$trennstriche
"Item 4"  
"Item 5"  
$trennstriche
"Item 6"  
$trennstriche[1]
"Item 7"  
$trennstriche
"Item 8"  
$trennstriche[2]
"Item 9"  
))

$ItemButton1 = New-Object System.Windows.Forms.Button
$ItemButton1.Location = New-Object System.Drawing.Size(75,380)
$ItemButton1.Size = New-Object System.Drawing.Size(80,80)
$ItemButton1.Text = "Item 1 und Item 2"  
$objForm.Controls.Add($ItemButton1)

$ItemButton1.Add_Click(
   {
??????????????????????????????
   })
   
$ItemButton2 = New-Object System.Windows.Forms.Button
$ItemButton2.Location = New-Object System.Drawing.Size(160,380)
$ItemButton2.Size = New-Object System.Drawing.Size(80,80)
$ItemButton2.Text = "Item 6, 7 und 8"  
$objForm.Controls.Add($ItemButton2)

$ItemButton2.Add_Click(
   {
??????????????????????????????
   })

$objListbox.Height = 270

$objListbox.add_SelectedIndexChanged({
   $objListbox.SelectedIndices | ?{$objListbox.GetSelected($_) -and $objListbox.Items[$_] -in $trennstriche} | %{$objListbox.SetSelected($_,$false)}
})

$objForm.Controls.Add($objListbox) 
$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

$x

Content-Key: 281198

Url: https://administrator.de/contentid/281198

Printed on: April 20, 2024 at 03:04 o'clock

Mitglied: 114757
114757 Aug 26, 2015 updated at 11:00:07 (UTC)
Goto Top
Moin Bugger,
Schau dir mal Zeile 105 an, dort findest du den passenden Befehl um Einträge zu selektieren:
$objListbox.SetSelected(0,$true)
Der erste Parameter ist der Index des Eintrags welcher selektiert werden soll (fängt bei 0 an zu zählen) und das $true besagt das dieser Eintrag markiert werden soll.

Gruß jodel32
Member: Bugger
Bugger Aug 26, 2015 at 11:16:07 (UTC)
Goto Top
Super, ich habe mir schon gedacht das es etwas mit diesem Befehl sein soll, konnte mir aber keinen Reim darauf machen.

Jetzt habe ich noch eine Frage kosmetischer Natur, geht das noch schöner als für jede Zeile eine eigene Zeile zu machen?
$objListbox.SetSelected(0;1;2,$true)
Irgendwie so, nur das es auch funktioniert?
Mitglied: 114757
Solution 114757 Aug 26, 2015 updated at 11:23:42 (UTC)
Goto Top
Stichwort ForEach Schleife ...
0,1,2,5,7,8 | %{$objlistbox.SetSelected($_,$true)}
oder eine ganze ununterbrochene Reihe
0..10 | %{$objlistbox.SetSelected($_,$true)}
Member: Bugger
Bugger Aug 26, 2015 at 11:23:39 (UTC)
Goto Top
Super, hast mir wieder sehr geholfen, vielen Dank! face-smile