highspeed1
Goto Top

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.

$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

Content-Key: 7955803872

Url: https://administrator.de/contentid/7955803872

Printed on: May 11, 2024 at 13:05 o'clock

Member: chkdsk
Solution chkdsk Jul 26, 2023 at 11:10:34 (UTC)
Goto Top
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()
Mitglied: 7907292512
Solution 7907292512 Jul 26, 2023 updated at 12:29:05 (UTC)
Goto Top
Oder mit Timer dann blockiert der UI Thread nicht.
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()
Gruß Siddius
Member: HighSpeed1
HighSpeed1 Jul 26, 2023 at 11:24:41 (UTC)
Goto Top
Danke für eure schnellen Antworten.

Diesen Befehl kannte ich noch nicht:

$form.Add_Shown

Gruß
Mitglied: 7907292512
7907292512 Jul 26, 2023 updated at 11:39:40 (UTC)
Goto Top
Dann solltest du dir die Doku mal anschauen, da gibt's noch eine Menge mehr face-smile
Form Klasse (Ereignisse).

Den Events lassen sich dann alle mit der Methode add_[EVENTNAME] des Controls Scriptblöcke als Handler zuweisen.

Gruß