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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7955803872
Url: https://administrator.de/contentid/7955803872
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
4 Kommentare
Neuester Kommentar
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ß