confusedbyte
Goto Top

Laufende Powershell:Form aktualisieren

Hallo Leute,

ich habe ein kleines Problem:

ich schreibe gerade ein kleines Programm mit Powershell, das u.a. die Internetverbindung (in eine Funktion gepackt) abfragt:

function inettest { 
#LAN(RJ45) Verbindungstest 
##########################
$eth = Get-NetAdapter | Where-Object { $_.Name -eq "Ethernet" } | Select-Object Status |Select-Object -Last 1| Select -ExpandProperty "Status"  
switch -Wildcard($eth)
    {
        "Up*" {inet1 ;break}  
	    "Disconnected*" {inet0; false ;break}  
	    default {echo "geht nicht"}  
	}
}

Je nach Ausgang, wird eine der folgenden Funktionen aktiviert:

function inet0
{
$Label3 = New-Object System.Windows.Forms.Label           
$Label3.Location = New-Object System.Drawing.Point(735, 165) 
$Label3.Text = "es besteht keine Verbindung   
zum Netzwerk"                      
$Label3.AutoSize = $True                                  
$Label3.Font = $Font2
$Form.Controls.Add($Label3)                            
$groupBox.Enabled = $false
$formButton.Enabled = $false
iiconr
}


function inet1
{
$Labeli = New-Object System.Windows.Forms.Label            
$Labeli.Location = New-Object System.Drawing.Point(735, 165) 
$Labeli.Text = "Netzwerk-Verbindung aktiv"                            
$Labeli.AutoSize = $True                                   
$Labeli.Font = $Font2
$Form.Controls.Add($Labeli)                               
iicong
}


Nehmen wir an der User aktiviert seine Internetverbindung (er hat einen Laptop). Die Box bleibt so bestehen nun Drückt er ein Aktualisieren Button :

$formButtonak = New-Object System.Windows.Forms.Button
$formButtonak.Location = New-Object System.Drawing.Point(50,567) 
$formButtonak.Size = New-Object System.Drawing.Size(120, 50)      
$formButtonak.Text = "Aktualisieren"  
$formButtonak.Font = $Font2
$formButtonak.BackColor = "#d0cdc6"  
$formButtonak.Add_Click(
{
   #Was muss hier rein ??????
})
$form.Controls.Add($formButtonak)

an dieser Stelle soll das Script(Programm) aktualisert werden, es soll nicht geschlossen werden und wieder neu gestartet werden.
$form.Refresh() alleine geht nicht und wenn ich einfach die Funktion " inettest " rein schreibe, funktioniert das zwar aber der alte Textblock verschwindet nicht
und der neue legt sich einfach darunter.

Gibt es da eine Möglichkeit den alten Text zu löchen oder halt eine Aktualisierung?

Lg Matze
verb_aus
verb_an

Content-Key: 342279

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

Printed on: April 23, 2024 at 18:04 o'clock

Member: H41mSh1C0R
Solution H41mSh1C0R Jul 03, 2017 at 08:39:58 (UTC)
Goto Top
Servus,

warum erstellst du in der funktion inet0 und inet1 jeweils das Label neu und machst ein add?

Wäre es nicht besser das Form vorher komplett zu erstellen und im Click Handler nur den Status korrekt zu setzen?

VG
Member: ConfusedByte
ConfusedByte Jul 03, 2017 at 09:04:24 (UTC)
Goto Top
Das habe ich probiert, da das Programm beim Starten die Abfrage automatisch macht, ohne das der User ein Button drücken muss, macht er das irgendwie nicht.
Der hier dargestellte Code ist ja nur ein kleiner Teil vom Großenganzen ^^
Ich hatte das Label einmal erstellt und mit der Entscheidung bzw. dem Status, dann den jeweiligen Text zu setzen, das ging allerdings nicht.
Mitglied: 133417
Solution 133417 Jul 03, 2017 updated at 10:24:10 (UTC)
Goto Top
das ging allerdings nicht.
TOP Fehlermeldung kann man da nur sagen face-sad

Wo ist das Problem?!, geht doch ...
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
$button3 = New-Object System.Windows.Forms.Button
$button2 = New-Object System.Windows.Forms.Button
$button1 = New-Object System.Windows.Forms.Button
$lbl = New-Object System.Windows.Forms.Label
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects


$handler_button3_Click= 
{
    $lbl.Text = "Ist doch nun wirklich nicht schwer!"  
    
}

$handler_button2_Click= 
{
    $lbl.Text = "beim Klick auf die Buttons"  

}

$handler_button1_Click= 
{
   $lbl.Text = "Ich ändere mich,"  
}

$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 = 101
$System_Drawing_Size.Width = 264
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.FormBorderStyle = 3
$form1.MaximizeBox = $False
$form1.MinimizeBox = $False
$form1.Name = "form1"  
$form1.Text = "Change label"  


$button3.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 174
$System_Drawing_Point.Y = 66
$button3.Location = $System_Drawing_Point
$button3.Name = "button3"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$button3.Size = $System_Drawing_Size
$button3.TabIndex = 3
$button3.Text = "Change 3"  
$button3.UseVisualStyleBackColor = $True
$button3.add_Click($handler_button3_Click)

$form1.Controls.Add($button3)


$button2.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 93
$System_Drawing_Point.Y = 66
$button2.Location = $System_Drawing_Point
$button2.Name = "button2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$button2.Size = $System_Drawing_Size
$button2.TabIndex = 2
$button2.Text = "Change 2"  
$button2.UseVisualStyleBackColor = $True
$button2.add_Click($handler_button2_Click)

$form1.Controls.Add($button2)


$button1.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 66
$button1.Location = $System_Drawing_Point
$button1.Name = "button1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$button1.Size = $System_Drawing_Size
$button1.TabIndex = 1
$button1.Text = "Change 1"  
$button1.UseVisualStyleBackColor = $True
$button1.add_Click($handler_button1_Click)

$form1.Controls.Add($button1)

$lbl.Anchor = 13
$lbl.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 65
$System_Drawing_Point.Y = 9
$lbl.Location = $System_Drawing_Point
$lbl.Name = "lbl"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 156
$lbl.Size = $System_Drawing_Size
$lbl.TabIndex = 0
$lbl.Text = "Das ist mein Label"  
$lbl.TextAlign = 32

$form1.Controls.Add($lbl)

#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

#Call the Function
GenerateForm
Gruß
Member: ConfusedByte
ConfusedByte Jul 03, 2017 at 13:50:22 (UTC)
Goto Top
Mein Problem liegt darin, das ich hier eine, wenn man es so sehen will, Aktualisierung brauche.
Das o.g. Thema ist nur ein kleiner Teil eines Gesamtprojektes(siehe Bild)
Die InternetVerbindung bzw. Serververbindungen werden über Verschiedene Funktionen automatisch beim Programmstart getestet und gesetzt.
Je nach Zustand der Verbindung wird ein entsprechender Text und ein Entsprechendes Logo ausgegeben.
Erst wenn der User den Button Aktualisieren drückt, soll dies nocheinmal überprüft werden und dann die neue Ausgabe angezeigt werden.
Bei meinen Versuchen hat die neue Überprüfung zwar geklappt aber der Alte Text und das Alte Logo sind stehen geblieben und der neue Status ist
unter dem Alten erschienen.
prog
netverb
Mitglied: 133417
Solution 133417 Jul 03, 2017 updated at 16:08:46 (UTC)
Goto Top
Dann setze einfach die Image-Eigenschaft/Icon deines Labels oder was du sonst als Control verwendest neu. Ohne deinen Code können wir leider nur raten was du falsch machst, da bringen deine Bildchen hier leider nichts, aber ich vermute mal wieder da hat einer einfach die Scopes in Powershell noch nicht ganz verstanden.
Bitte lese dazu about_scopes.
Denn Variablen sind nicht aus jedem Kontext beschreib- bzw. änderbar. Insbesondere Scriptblocks/ Functions und Switch-Konstrukte musst du hier besonders beachten.
Member: ConfusedByte
ConfusedByte Jul 04, 2017 at 10:49:34 (UTC)
Goto Top
Ich habe die Lösung:

Erstmal Danke H41mSh1C0R und BibersBaum

Ich habe nur EIN Label erstellt :

$Labelv0 = New-Object System.Windows.Forms.Label           
$Labelv0.Location = New-Object System.Drawing.Point(735, 225) 
$Labelv0.AutoSize = $True                                   
$Labelv0.Font = $Font2

und den "Inhalt" in Funktionen gesetzt

function inet0
{
$Label3.Text = "es besteht keine Verbindung   
zum Netzwerk"       
$Form.Controls.Add($Label3)                                
}

function inet1
{
$Label3.Text = "Netzwerk-Verbindung aktiv"       
$Form.Controls.Add($Label3)                              
}

Die jeweiligen Funktionen werden dann mit der Adapter-Abfrage mitgegeben, die durch den Aktualisieren-Button erneut ausgelöst wird.

$formButtonak = New-Object System.Windows.Forms.Button
$formButtonak.Location = New-Object System.Drawing.Point(50,567) 
$formButtonak.Size = New-Object System.Drawing.Size(120, 50)      
$formButtonak.Text = "Aktualisieren"  
$formButtonak.Font = $Font2
$formButtonak.BackColor = "#d0cdc6"  
$formButtonak.Add_Click(
{
   Vpntest        #<-------------- Funktion-Adapter-Abfrage,  in der die jeweiligen, o.g. Funktionen mitgegeben werden
   inettest        #<-------------- Funktion-Adapter-Abfrage,  in der die jeweiligen, o.g. Funktionen mitgegeben werden
})
$form.Controls.Add($formButtonak)



Mein Fehler war: die jeweilige Label Neuerstellung in den Funktionen inet0 und inet1. Mit der Neu-Anweisung der Funktion-Adapter-Abfrage, habe ich durch die Verknüpfungen das komplette Label wieder neu erstellt und unter das vorhandene andere Label geschoben. Mit der derzeitigen Lösung erneuere ich nur den Inhalt und nicht das ganze Label.