Powershell - GUI Frage?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Schön Bunt....😅

ich schreibe das vorherige einfach mal weiter...

Alles dreht sich weiter um die Delegaten (..._Action )...

Texbox.AppendText oder TextBox.Text+= hängt Text ans Ende an... (nicht vergessen das wir hier mit Text arbeiten und nicht mit Powershellobjekten! ..also alles hübsch zu Strings zermatschen. und Zeilenvorschübe selbst generieren...

Add-Type -a 'System.Windows.Forms'
  #für  Faule erzeuge ein Par shortcut-Variablen auf .Net-Objects
'Point','Size','Color','Font','ColorTranslator'|%{iex ('$D_{0}=[System.Drawing.{0}]' -f $_)}
'Form', 'Button', 'TextBox'|%{iex ('$WF_{0}=[System.Windows.Forms.{0}]' -f $_)}
Get-Variable D_*,WF_* #show them for Demo


$Form = New-Object $WF_Form
$Form.Text = "Simple FormDemo"
$Form.Size = [System.Drawing.Size]::new(600,400)


$OutputTextBox = New-Object $WF_TextBox
$OutputTextBox.Size = $D_Size::new(500,200)
$OutputTextBox.Location = $D_Point::new(30,30)
$OutputTextBox.Font = $D_Font::new("Consolas",8)  #Wenn's tabellarisch werden soll  Monospace Font!
$OutputTextBox.Multiline = $true
$OutputTextBox.ReadOnly = $true
$OutputTextBox.WordWrap = $False
$OutputTextBox.ScrollBars = 3
$OutputTextBox.Text='Blubb'+[Environment]::NewLine
$Form.Controls.Add($OutputTextBox)


$InputBox = New-Object $WF_TextBox
$InputBox.Width = 400
$InputBox.Location = $D_Point::new(30,250)
$InputBox.AcceptsReturn = $False     #reicht ein Enter  an $Form.AcceptButton weiter  Für  das senden ist  dassen  click  zuständig
$Form.Controls.Add($InputBox)


$SendButton = New-Object $WF_Button
$SendButton.Text = "Send"
$SendButton.AutoSize = $True
$SendButton.Location = $D_Point::new(450,250)
$SendButton_Action = {
    $OutputTextBox.AppendText($InputBox.Text+[Environment]::NewLine) #füge die Eingabe der Outbox hinzu + einen Zeilenforschub
    $InputBox.Text='' #Lösche  nach dem Senden das Inputfeld
}
$SendButton.Add_Click($SendButton_Action)
$Form.AcceptButton = $SendButton    #setze disen Button....
$Form.Controls.Add($SendButton)


$DirButton = New-Object $WF_Button
$DirButton.Text = "List Files in Dir"
$DirButton.AutoSize = $True
$DirButton.Location = $D_Point::new(450,280)
$DirButton_Action = {
    $OutputTextBox.Text='' #Lösche das Outputfeld
      #mache aus den Objekten   hübsche  Strings
    $gciText=(Get-ChildItem *.* -File|%{
        '{0}   {1}{2}' -f $_.LastWriteTime,$_.Name,[Environment]::NewLine
    })
    $OutputTextBox.AppendText( $gciText )  #ab ins  Textfeld
    #$OutputTextBox.Text+=$gciText ...#Geht  auch
    $OutputTextBox.SelectionStart = $OutputTextBox.Text.Length  #Scrol ans Ende
    $OutputTextBox.ScrollToCaret()
}
$DirButton.Add_Click($DirButton_Action)
$Form.Controls.Add($DirButton)


$Null=$Form.ShowDialog()
$Form.Dispose()
'Bye...'
sleep -s 3
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

DNSxxx 
Beitragsersteller
 12.04.2022, 16:10

Wow. Nochmals vielen Dank (schon wieder) für die überaus Hilfreiche und äußerst ausführliche Hilfe.

Das es noch Leute gibt die sich für einen fremden Menschen so viel Zeit nehmen.

Werd mich jetzt mal mit dem was ich "noch" nicht verstehe etwas beschäftigen.

Z.b. mit was du mit Delgaten meinst.

Nochmals Danke für die Zeit und Mühe

0