Powershell - Anzeige im Fenster soll sich jede Sekunde ändern und Beenden wenn fertig
Hallo.
Ich möchte das die Anzeige im Fenster sich jede Sekunde ändert. Wenn der $Counter bei 10 angekommen ist soll sich das Fenster schließen.
Wie kann man das umsetzen?
Aktuell ist das Verhalten des Skrips so:
Wenn man das Fenster schließt kommt eine Verweilzeit von einer Sekunde und dann wird das Fernster erneut aufgebaut mit dem neuen Text.
Könnt ihr mir da helfen?
Gruß
Christoph
Ich möchte das die Anzeige im Fenster sich jede Sekunde ändert. Wenn der $Counter bei 10 angekommen ist soll sich das Fenster schließen.
$Counter = 0
while ($Counter -lt 10)
{
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = "PrgKopfWop.ps1 - Dateneingabe Teilegrunddaten"
$form.Size = New-Object System.Drawing.Size(500,500)
$form.StartPosition = 'CenterScreen'
$label_Counter = New-Object System.Windows.Forms.Label
$label_Counter.Location = New-Object System.Drawing.Point(10,10)
$label_Counter.Size = New-Object System.Drawing.Size(100,20)
$label_Counter.Text = "Counter: $Counter"
$Form.Controls.Add($label_Counter)
$form.Topmost = $true
$form.ShowDialog()
sleep 1
$Counter = $Counter + 1
}
Wie kann man das umsetzen?
Aktuell ist das Verhalten des Skrips so:
Wenn man das Fenster schließt kommt eine Verweilzeit von einer Sekunde und dann wird das Fernster erneut aufgebaut mit dem neuen Text.
Könnt ihr mir da helfen?
Gruß
Christoph
Please also mark the comments that contributed to the solution of the article
Content-Key: 7955803872
Url: https://administrator.de/contentid/7955803872
Printed on: December 4, 2023 at 11:12 o'clock
4 Comments
Latest comment
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$Counter = 0
$form = New-Object System.Windows.Forms.Form
$form.Text = "PrgKopfWop.ps1 - Dateneingabe Teilegrunddaten"
$form.Size = New-Object System.Drawing.Size(500, 500)
$form.StartPosition = 'CenterScreen'
$label_Counter = New-Object System.Windows.Forms.Label
$label_Counter.Location = New-Object System.Drawing.Point(10, 10)
$label_Counter.Size = New-Object System.Drawing.Size(100, 20)
$form.Controls.Add($label_Counter)
$form.Topmost = $true
$form.Add_Shown({
while ($Counter -lt 10) {
$label_Counter.Text = "Counter: $Counter"
$Counter++
Start-Sleep -Seconds 1
}
$form.Close()
})
$form.ShowDialog()

Oder mit Timer dann blockiert der UI Thread nicht.
Gruß Siddius
Add-Type -A System.Windows.Forms
Add-Type -A System.Drawing
$form = New-Object System.Windows.Forms.Form -P @{
ClientSize = '300,300'
Text = "Counter"
add_Closed = {
$timer.Dispose()
}
add_Load = {
$timer.Start()
}
ControlBox = $false
TopMost = $true
}
$lbl = New-Object System.Windows.Forms.Label -P @{
Dock = 'Fill'
TextAlign = 'MiddleCenter'
Text = '0'
Font = [System.Drawing.Font]::new('Calibri',70)
}
$timer = New-Object System.Windows.Forms.Timer -P @{
Interval = 1000
add_Tick = {
if ($form.Counter -eq 10){
$form.Close()
}
$lbl.Text = (++$form.Counter)
}
}
$form | Add-Member -MemberType NoteProperty -Name Counter -Value 0
$form.Controls.Add($lbl)
[void]$form.ShowDialog()

Dann solltest du dir die Doku mal anschauen, da gibt's noch eine Menge mehr 
Form Klasse (Ereignisse).
Den Events lassen sich dann alle mit der Methode add_[EVENTNAME] des Controls Scriptblöcke als Handler zuweisen.
Gruß
Form Klasse (Ereignisse).
Den Events lassen sich dann alle mit der Methode add_[EVENTNAME] des Controls Scriptblöcke als Handler zuweisen.
Gruß