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-ID: 281198

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

114757
114757 26.08.2015 aktualisiert um 13:00:07 Uhr
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
Bugger
Bugger 26.08.2015 um 13:16:07 Uhr
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?
114757
Lösung 114757 26.08.2015 aktualisiert um 13:23:42 Uhr
Goto Top
Stichwort ForEach Schleife ...
0,1,2,5,7,8 | %{$objlistbox.SetSelected($_,$true)}
oder eine ganze ununterbrochene Reihe
0..10 | %{$objlistbox.SetSelected($_,$true)}
Bugger
Bugger 26.08.2015 um 13:23:39 Uhr
Goto Top
Super, hast mir wieder sehr geholfen, vielen Dank! face-smile