Powershell CheckedListbox Einträge verbergen
Hallo zusammen,
ich bin gerade dabei mir ein Skript zusammen zu basteln was mir Arbeit abnimmt. Mein Skript funktioniert soweit sehr gut, nur bin ich am überlegen dies etwas zu erweitern.
Die Funktion dahinter ist das es unsere Kataloge verschicken soll mit einem festen Text. Da sich die Kataloge aber auch ändern, nutze ich dafür eine Conf Datei in der ich Variablen pflege:
Bis jetzt versendet er einfach alle Kataloge. Nun möchte ich das aber so abändern das ich auswählen kann WELCHE er versenden soll. Entweder würde ich das mit einer Checklistbox oder Checklist machen. Den Namen des jeweiligen Katalogs Steuer ich per Variable was soweit auch Funktioniert.... ABER :D wenn es zur zeit nur 2 von 5 Kataloge gibt, sieht das dann so aus:
Nun zu meiner eigentlichen Frage, gibt es die Möglichkeit wenn es KEINEN wert hinter der Variable gibt, die Checkbox auszublenden?
Ich kann damit umgehen, aber wenn ich das auf der Messe laufen habe und ein Handelsvertreter von uns soll das bedienen sehe ich schon die riesigen Fragezeichen über seinem Kopf stehen.
ich bin gerade dabei mir ein Skript zusammen zu basteln was mir Arbeit abnimmt. Mein Skript funktioniert soweit sehr gut, nur bin ich am überlegen dies etwas zu erweitern.
Die Funktion dahinter ist das es unsere Kataloge verschicken soll mit einem festen Text. Da sich die Kataloge aber auch ändern, nutze ich dafür eine Conf Datei in der ich Variablen pflege:
Ohne= Fuer eine Preisliste wenden sie sich bitte an ihren zuständigen Handelsvertreter. Vielen dank'
Brutto= Brutto 123'
Netto= Netto 123'
SNetto= Snetto 123'
beschreibung_Katalog1= Sommer Fruehjahr 2054:
beschreibung_Katalog2= Herbst Fruehjahr 2054:
beschreibung_Katalog3=
beschreibung_Katalog4=
beschreibung_Katalog5=
Katalog1= https://my.hidrive.com/lnk/O0CojJEr
Katalog2= Link 2
Katalog3=
Katalog4=
Katalog5=
Bis jetzt versendet er einfach alle Kataloge. Nun möchte ich das aber so abändern das ich auswählen kann WELCHE er versenden soll. Entweder würde ich das mit einer Checklistbox oder Checklist machen. Den Namen des jeweiligen Katalogs Steuer ich per Variable was soweit auch Funktioniert.... ABER :D wenn es zur zeit nur 2 von 5 Kataloge gibt, sieht das dann so aus:
Nun zu meiner eigentlichen Frage, gibt es die Möglichkeit wenn es KEINEN wert hinter der Variable gibt, die Checkbox auszublenden?
Ich kann damit umgehen, aber wenn ich das auf der Messe laufen habe und ein Handelsvertreter von uns soll das bedienen sehe ich schon die riesigen Fragezeichen über seinem Kopf stehen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3551376374
Url: https://administrator.de/contentid/3551376374
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
4 Kommentare
Neuester Kommentar
Servus @Springstil .
Ich würde die Config ja gleich as XML ablegen, damit lässt sich effizienter arbeiten.
Die XML ist hier im Beispiel jetzt direkt im Code hinterlegt (zum Ausprobieren), im Real-Life importierst du die ja aus einer Datei.
Geht aber natürlich auch in dem Format was du jetzt hast, die Anzahl der Katalog ist auch hier beliebig erweiterbar ohne den Code anpassen zu müssen
Vielleicht findest du ja ein paar Schnippsel mit denen du dein Skript etwas aufpeppen kannst .
Grüße Uwe
Ich würde die Config ja gleich as XML ablegen, damit lässt sich effizienter arbeiten.
Die XML ist hier im Beispiel jetzt direkt im Code hinterlegt (zum Ausprobieren), im Real-Life importierst du die ja aus einer Datei.
[xml]$config = @'
<?xml version="1.0" encoding="utf-8"?>
<config>
<catalogs>
<catalog url="https://domain.tld/catalog1.pdf">Katalog 1</catalog>
<catalog url="https://domain.tld/catalog2.pdf">Katalog 2</catalog>
<catalog url="https://domain.tld/catalog3.pdf">Katalog 3</catalog>
<catalog url="https://domain.tld/catalog4.pdf">Katalog 4</catalog>
</catalogs>
</config>
'@
function GenerateForm {
Add-Type -A System.Windows.Forms
$form = New-Object System.Windows.Forms.Form -P @{
ClientSize = '200,200'
Text = "Checked-Listbox"
}
$listbox = New-Object System.Windows.Forms.CheckedListBox -P @{
Location = '10,10'
Size = '180,150'
Anchor = 'Top,Right,Bottom,Left'
CheckOnClick = $true
}
$btn = New-Object System.Windows.Forms.Button -P @{
Location = '10,160'
Size = '180,30'
Text = 'Get checked'
Anchor = 'Bottom,Left,Right'
add_Click = {
$catalog_links = $config.config.catalogs.catalog | ?{$_.innerText -in $listbox.CheckedItems} | %{$_.url}
[System.Windows.Forms.MessageBox]::Show(($catalog_links -join "`n"),"Checked catalogs",0,32)
}
}
$listbox.Items.AddRange(@($config.config.catalogs.catalog.innerText))
$form.Controls.AddRange(@($listbox,$btn))
[void]$form.ShowDialog()
}
GenerateForm
Geht aber natürlich auch in dem Format was du jetzt hast, die Anzahl der Katalog ist auch hier beliebig erweiterbar ohne den Code anpassen zu müssen
$config = @'
beschreibung_Katalog1 = Sommer Fruehjahr 2054:
beschreibung_Katalog2 = Herbst Fruehjahr 2054:
beschreibung_Katalog3 =
beschreibung_Katalog4 =
beschreibung_Katalog5 =
Katalog1 = https://my.hidrive.com/lnk/O0CojJEr
Katalog2 = Link 2
Katalog3 =
Katalog4 =
Katalog5 =
'@ | ConvertFrom-StringData
function GenerateForm {
Add-Type -A System.Windows.Forms
$form = New-Object System.Windows.Forms.Form -P @{
ClientSize = '200,200'
Text = "Checked-Listbox"
}
$listbox = New-Object System.Windows.Forms.CheckedListBox -P @{
Location = '10,10'
Size = '180,150'
Anchor = 'Top,Right,Bottom,Left'
CheckOnClick = $true
}
$btn = New-Object System.Windows.Forms.Button -P @{
Location = '10,160'
Size = '180,30'
Text = 'Get checked'
Anchor = 'Bottom,Left,Right'
add_Click = {
$catalog_links = $config.GetEnumerator() | ?{$_.Value -in $listbox.CheckedItems} | %{$config."Katalog$([regex]::match($_.Key,'\d+$').Value)"}
[System.Windows.Forms.MessageBox]::Show(($catalog_links -join "`n"),"Checked catalogs",0,32)
}
}
$listbox.Items.AddRange(@($config.GetEnumerator() | ?{$_.Name -match '^beschreibung_Katalog\d+$' -and $_.Value.trim() -ne ''} | %{$_.Value}))
$form.Controls.AddRange(@($listbox,$btn))
[void]$form.ShowDialog()
}
GenerateForm
Vielleicht findest du ja ein paar Schnippsel mit denen du dein Skript etwas aufpeppen kannst .
Grüße Uwe