Powershell Dynamischen Checkboxen
Hallo,
ich probiere ich mich gerade an Dynamischen Checkboxen und habe dieses Script:
Was ich jetzt nicht herausgefunden habe ist, wie ich bestimmte Checkboxen auswähle. Möglicherweise habe ich google auch nur die falschen Fragen gestellt.^^
Wenn man die Checkboxen einzeln hat, kann ich diese ja auch explizit anwählen.
Also z.B. if ( $checkboxTest.Checked -eq $true ) {write-host "yeah"}
Wie kann ich denn in dem Script oben die Checkbox Test2 direkt ansprechen wie bei einer einzelnen Checkbox?
Danke und Gruß
ich probiere ich mich gerade an Dynamischen Checkboxen und habe dieses Script:
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form1 = New-Object System.Windows.Forms.Form
$button1 = New-Object System.Windows.Forms.Button
$listBox1 = New-Object System.Windows.Forms.ListBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
$handler_button1_Click=
{
$listBox1.Items.Clear();
# Keep track of whether something has been added to the list
$ContentPresent = $false
# Iterate over the checkboxes, one by one
foreach($CheckBox in $CheckBoxes){
if($CheckBox.Checked){
$listBox1.Items.Add("{0} (with value ""{1}"") has been checked" -f ($CheckBox.Name,$CheckBox.Text))
$ContentPresent = $True
}
}
# If something was already added to the list, no need to show default message
if (-not $ContentPresent) { $listBox1.Items.Add("No CheckBox selected....") }
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$form1.Text = "Primal Form"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 450
$System_Drawing_Size.Height = 236
$form1.ClientSize = $System_Drawing_Size
$button1.TabIndex = 4
$button1.Name = "button1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button1.Size = $System_Drawing_Size
$button1.UseVisualStyleBackColor = $True
$button1.Text = "Run Script"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 27
$System_Drawing_Point.Y = 156
$button1.Location = $System_Drawing_Point
$button1.DataBindings.DefaultDataSourceUpdateMode = 0
$button1.add_Click($handler_button1_Click)
$form1.Controls.Add($button1)
$listBox1.FormattingEnabled = $True
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 301
$System_Drawing_Size.Height = 212
$listBox1.Size = $System_Drawing_Size
$listBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$listBox1.Name = "listBox1"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 137
$System_Drawing_Point.Y = 13
$listBox1.Location = $System_Drawing_Point
$listBox1.TabIndex = 3
$form1.Controls.Add($listBox1)
# Keep track of number of checkboxes
$CheckBoxCounter = 1
$CheckBoxLabels=@(
"Test1"
"Test2"
"Test3"
)
# When we create a new textbox, we add it to an array for easy reference later
$CheckBoxes = foreach($Label in $CheckBoxLabels) {
$CheckBox = New-Object System.Windows.Forms.CheckBox
$CheckBox.UseVisualStyleBackColor = $True
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 104
$System_Drawing_Size.Height = 24
$CheckBox.Size = $System_Drawing_Size
$CheckBox.TabIndex = 2
# Assign text based on the input
$CheckBox.Text = $Label
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 25
# Make sure to vertically space them dynamically, counter comes in handy
$System_Drawing_Point.Y = 15 + (($CheckBoxCounter - 1) * 20)
$CheckBox.Location = $System_Drawing_Point
$CheckBox.DataBindings.DefaultDataSourceUpdateMode = 0
# Give it a unique name based on our counter
$CheckBox.Name = "CheckBox$CheckBoxCounter"
# Add it to the form
$form1.Controls.Add($CheckBox)
# return object ref to array
$CheckBox
# increment our counter
$CheckBoxCounter++
}
#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($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
Was ich jetzt nicht herausgefunden habe ist, wie ich bestimmte Checkboxen auswähle. Möglicherweise habe ich google auch nur die falschen Fragen gestellt.^^
Wenn man die Checkboxen einzeln hat, kann ich diese ja auch explizit anwählen.
Also z.B. if ( $checkboxTest.Checked -eq $true ) {write-host "yeah"}
Wie kann ich denn in dem Script oben die Checkbox Test2 direkt ansprechen wie bei einer einzelnen Checkbox?
Danke und Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 561381
Url: https://administrator.de/contentid/561381
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
7 Kommentare
Neuester Kommentar
Wenn man die Checkboxen einzeln hat, kann ich diese ja auch explizit anwählen.
So wie du es auch hinzufügst, über die Controls Collection der Formhttps://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.control ...
$form1.Controls['Checkbox2']
Ja klar, die kannst du ganz normal wie in Powershell üblich über ein Where Object ausfiltern, dafür ist es ja eine Collection aus Controls-Objekten mit den entsprechenden Eigenschaften ...
$cb = $form1.Controls | ? Text -eq 'Test2'
Zitat von @Bugger:
Weiß noch nicht was mir besser gefallen würde, dass muss ich mir dann nochmal überlegen.
Du kannst auch einen Eventhandler an jede Checkbox klemmen und die autoamtisch ausgeführt wird wenn z.B. eine Checkbox geklickt wird, je nachdem was du mit den Boxen halt machen willst.Weiß noch nicht was mir besser gefallen würde, dass muss ich mir dann nochmal überlegen.
Beispiel (Jede Box erhält einen Klick-Handler, oder du nutzt den CheckedChanged Handler)
1..5 | %{
$cb = New-Object System.Windows.Forms.CheckBox
$cb.name = "Checkbox$_"
$cb.Checked = $false
$cb.Text = "Checkbox$_"
$cb.Left = 50
$cb.Top = $_ * 20
$cb.add_click({
[System.Windows.Forms.MessageBox]::Show($this.Name + " : " + $this.Checked)
})
$form1.Controls.Add($cb)
}
??
Siehe mein letzten Code der filtert nach dem enthaltenen Text und der Funktioniert problemlos
Siehe mein letzten Code der filtert nach dem enthaltenen Text und der Funktioniert problemlos
if (($form1.Controls | ? Text -eq 'Test2').Checked){
write-host "test2"
}