Powershell System windows forms eingabefeld für Nummern?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

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