Powershell: ScrollBar in ListBox definieren
Hallo zusammen,
benötige mal wieder Unterstüzung.
Ich erzeuge CheckBoxen in einem Array.
Aufgrund deren Anzahl benötige ich einen Scrollbar, welchen ich über eine ListBox hinzufüge.
Mein Problem, ich habe keine Ahnung, wie ich den Input für die Scrollbar richtig definieren kann/ soll?
Wenn ich dies über "Items.AddRange" mache, funktioniert die Scrollbar. Ist aber nicht wirklich toll mit den dargestellten Zahlen.
Schöne Grüße
Markus 2016
benötige mal wieder Unterstüzung.
Ich erzeuge CheckBoxen in einem Array.
Aufgrund deren Anzahl benötige ich einen Scrollbar, welchen ich über eine ListBox hinzufüge.
Mein Problem, ich habe keine Ahnung, wie ich den Input für die Scrollbar richtig definieren kann/ soll?
Wenn ich dies über "Items.AddRange" mache, funktioniert die Scrollbar. Ist aber nicht wirklich toll mit den dargestellten Zahlen.
$Global:Feature = @(Get-WindowsOptionalFeature -Path "$Global:Projekt\Mount" | Select FeatureName, State)
$Global:FeatureName = @($Global:Feature | Where-Object {$_} | ForEach-Object {$_} | Sort-Object FeatureName | Select-Object)
$Global:FeatureCheckbox = @()
$Global:CheckboxBox = New-Object System.Windows.Forms.ListBox
$Global:CheckboxBox.Location = New-Object System.Drawing.Point(350,70)
$Global:CheckboxBox.Size = New-Object System.Drawing.Size(590,420)
$Global:CheckboxBox.DataBindings.DefaultDataSourceUpdateMode = 0
$Global:CheckboxBox.ScrollAlwaysVisible = $true
$Global:CheckboxBox.BorderStyle = "none"
$Global:CheckboxBox.Items.AddRange(1..200)
$Global:Window.Controls.Add($Global:CheckboxBox)
$i = 0
ForEach ($_ in $Global:FeatureName ) {
$Global:Feature = New-Object System.Windows.Forms.Checkbox
$Global:Feature.Text = $_.FeatureName
$Global:Feature.Name = $_.FeatureName
$Global:Feature.Tag = $_.State
$Global:Feature.DataBindings.DefaultDataSourceUpdateMode = 0
$Global:FeatureCheckbox += @($Global:Feature)
$Global:CheckboxBox.Controls.Add($Global:Feature)
$Global:FeatureState = New-Object System.Windows.Forms.Label
$Global:FeatureState.Text = $_.State
$Global:FeatureState.Name = $_.FeatureName
$Global:FeatureState.DataBindings.DefaultDataSourceUpdateMode = 0
$Global:CheckboxBox.Controls.Add($Global:FeatureState)
$i++
$Y = $i * 20
$Global:Feature.Location = New-Object System.Drawing.Size(20,($Y-10))
$Global:Feature.Size = New-Object System.Drawing.Size(280,20)
$Global:FeatureState.Location = New-Object System.Drawing.Size(300,($Y-10))
$Global:FeatureState.Size = New-Object System.Drawing.Size(180,20)
}
Schöne Grüße
Markus 2016
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 325228
Url: https://administrator.de/contentid/325228
Ausgedruckt am: 27.11.2024 um 13:11 Uhr
11 Kommentare
Neuester Kommentar
@emeriks hat aber recht, das was eine Checkbox kann, kann auch eine checked listbox.
So wie du das oben machst ist das Grüzze, sorry aber das macht kein vernünftiger Programmierer.
Und natürlich kannst du die checked listbox nach enabled/disabled filtern, dafür gibt es sogar eine eigene Eigenschaft namens Checkeditems, wäre ja sinnlos wenn sowas nicht möglich wäre.
Ebenso kannt du das Items-Array dieser per Where-Objekt filtern!
Ich sehe hier kein Problem.
Du solltest dich vielleicht erst mal grundlegend mit Windows Forms-Elementen in Visual Studio auseinandersetzen, denn damit lernst du die Controls und Ihre Eigenschaften wesentlich besser kennen als wenn du nur mit der Powershell oder irgendeinem klicki bunti editor hantierst der einem nicht alle Möglichkeiten auf den ersten Blick zeigt.
Ich würde sowas per Datatable machen und in der GUI ein Control mit der Datatable per Source-Eigenschaft verknüpfen.
Hat den Vorteil das GUI und Daten jeweils verknüpft sind und beliebig viele Daten zu den Items hinterlegt werden können und alles immer synchron ist.
Gruß mik
So wie du das oben machst ist das Grüzze, sorry aber das macht kein vernünftiger Programmierer.
, da hiermit das Form.Label mit dem State der Features nach meinem Wissen nicht so eingebunden werden kann, dass ich später nach Enable / Disable in der GUI filtern kann.
Glaube keiner versteht hier was du mit dem Kauderwelsch meinst.Und natürlich kannst du die checked listbox nach enabled/disabled filtern, dafür gibt es sogar eine eigene Eigenschaft namens Checkeditems, wäre ja sinnlos wenn sowas nicht möglich wäre.
Ebenso kannt du das Items-Array dieser per Where-Objekt filtern!
Ich sehe hier kein Problem.
Du solltest dich vielleicht erst mal grundlegend mit Windows Forms-Elementen in Visual Studio auseinandersetzen, denn damit lernst du die Controls und Ihre Eigenschaften wesentlich besser kennen als wenn du nur mit der Powershell oder irgendeinem klicki bunti editor hantierst der einem nicht alle Möglichkeiten auf den ersten Blick zeigt.
Ich würde sowas per Datatable machen und in der GUI ein Control mit der Datatable per Source-Eigenschaft verknüpfen.
Hat den Vorteil das GUI und Daten jeweils verknüpft sind und beliebig viele Daten zu den Items hinterlegt werden können und alles immer synchron ist.
Gruß mik
In dem Fall nimmst du besser ein ListView- oder DataGridView-Control.
Hier ein Beispiel für ein ListView-Control:
Hier ein Beispiel für ein ListView-Control:
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$listview = New-Object System.Windows.Forms.ListView
$colName = New-Object System.Windows.Forms.ColumnHeader
$colState = New-Object System.Windows.Forms.ColumnHeader
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
$handler_form1_Load=
{
1..10 | %{
$item = $listview.Items.Add("Programm $_")
$item.SubItems.Add((@('Enabled','Disabled') | Get-Random))
}
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 282
$System_Drawing_Size.Width = 383
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.MaximizeBox = $False
$form1.MinimizeBox = $False
$form1.Name = "form1"
$form1.Text = "ListView"
$form1.add_Load($handler_form1_Load)
$listview.Anchor = 15
$listview.CheckBoxes = $True
$listview.Columns.Add($colName)|Out-Null
$listview.Columns.Add($colState)|Out-Null
$listview.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$listview.Location = $System_Drawing_Point
$listview.MultiSelect = $False
$listview.Name = "listview"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 258
$System_Drawing_Size.Width = 359
$listview.Size = $System_Drawing_Size
$listview.TabIndex = 1
$listview.UseCompatibleStateImageBehavior = $False
$listview.View = 1
$listView.FullRowSelect = $true
$form1.Controls.Add($listview)
$colName.Name = "colName"
$colName.Text = "Name"
$colName.Width = 173
$colState.Name = "colState"
$colState.Text = "State"
$colState.Width = 110
#endregion Generated Form Code
#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
} #End Function
GenerateForm
Quark, eine Extra-Scrollbar brauchst du in keinem Fall, da die Controls diese Automatisch einblenden!! Ansonsten hast du die Property zum Anzeigen von Scrollleisten in den Controls falsch gesetzt. Du fügst immer noch Checkboxes per Control ein????????? Du hast das Prinzip leider nicht verstanden. Setzen 6
Arbeite erst mal eine Woche mit VS und komm dann wieder...
Arbeite erst mal eine Woche mit VS und komm dann wieder...