Powershell - GUI Frage?
Hallo,
ich (neu in Powershell) schreibe gerade für meine Arbeitskollegen ein für die meisten relativ einfaches Programm (mit Windows Forms GUI), das einen bestimmten Ordner wieder aus der Sicherung zurückholt. Hab ein paar Arbeitskollegen die sich mit Ordner kopieren und einfügen etwas schwer tun.
In diesem Programm möchte ich ein Fenster machen in dem verschiedene Ausgaben angezeigt werden können. Z.b. eine Auflistung der kopierten Dateien.
Hatte zuerst vor dies in Python zu schreiben weil ich dies ein bisschen besser könnte, aber da spielt mir unsere IT nicht mit.
So jetzt zu meiner Frage:
Ich hätte das mit einer TextBox gelöst, aber ich schaffe es nicht immer wieder eine Zeile an die vorherige Ausgabe anzuhängen. Hab da schon etwas im Internet gestöbert aber bin noch nicht fündig geworden.
So würde meine GUI in etwa aussehen:
Ich möchte also da wo Erste Zeile steht immer wieder eine neue dran Hängen.
Hätte es z.b. so probiert:
function yes-button {
$TextBox_Output.AppendText = "test"
}
Die TextBox soll nur zur Ausgabe verwendet werden und nicht zur Eingabe.
Ist TextBox überhaupt das richtige?
Und wenn ja wie kann ich dann eine Zeile hinzufügen?
Würde mich sehr freuen mir da jemand helfen könnte.
Mit vielen freundlich Grüßen an alle klügeren (wie mich) da draußen.
Gruß Thomas
1 Antwort
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
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