Powershell System windows forms eingabefeld für Nummern?
Hallo ich mache mit Powershell ein GUI aber brauche noch ein textfeld in das man nur Zahlen eingeben kann aber finde dazu nirgendwo etwas. Ist es überhaupt möglich und falls ja wie?
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Windows, PowerShell, Programmieren & Softwareentwicklung
Die Verfahrensweise ist die gleiche Wie in C# . Lediglich die Sprache ist eine Andere...
erste Variante man schreibt eine Handler für das TextCanged-Ereignis der ganz normalen Textbox.
Demo.ps1
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object System.Windows.Forms.Form
$Form.Text = 'Irgendwas'
$Form.Size = '400,100'
$Label = New-Object 'System.Windows.Forms.Label'
$Label.Location = '10,10'
$Label.AutoSize = $True
$Label.Text = 'Zahlen eingeben: '
$TextBox = New-Object 'System.Windows.Forms.TextBox'
$TextBox.Location = '110,10'
$TextBox.Size = '180,20'
$TextBox.PasswordChar = $Null
#Definition Delegat (Scriptblock) für TextChanged-Event der Textbox (was gemacht werden soll, wenn sich der Text ändert)
$Only_Numbers_Input = {
$this.Text = $this.Text -replace '\D' #entferne alle Zeichen, welche keine Ziffer sind
$this.Select($this.Text.Length, 0) #stetz den Cursor ans Ende Zeichenkette
}
#Delegaten an den TextChanged-Handler binden
$TextBox.Add_TextChanged( $Only_Numbers_Input )
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = '300,10'
$OKButton.Size = '70,20'
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
#Definierte Objekte an das Fenster binden
$Label,$TextBox,$OKButton|%{$Form.Controls.Add($_)}
$Form.AcceptButton = $OKButton
$Result = $Form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
"Eingabe war {0}" -f $TextBox.Text
}
pause
Die andere Variante wäre eine vorgegebene Eingabemasken-Box , da kannst Du vordefinieren, was du grundsätzlich erwartest.
Demo2.ps1
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object System.Windows.Forms.Form
$Form.Text = 'Irgendwas'
$Form.Size = '400,100'
$Label1 = New-Object 'System.Windows.Forms.Label'
$Label1.Location = '10,10'
$Label1.AutoSize = $True
$Label1.Text = 'Handynummer: '
#https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.maskedtextbox?view=windowsdesktop-6.0
$MaskedTextBox = New-Object System.Windows.Forms.MaskedTextBox
$MaskedTextBox.Location = '100,10'
$MaskedTextBox.Size = '180,20'
$MaskedTextBox.PasswordChar = $Null
$MaskedTextBox.Mask = '+4\9 100 ###############' #https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.maskedtextbox.mask?view=windowsdesktop-6.0
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = '300,10'
$OKButton.Size = '70,20'
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$Label1,$MaskedTextBox,$OKButton|%{$Form.Controls.Add($_)}
$Form.AcceptButton = $OKButton
$Result = $Form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
"Du hast eigegeben {0}" -f $MaskedTextBox.Text
}
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren