Skapa en anpassad indataruta

Skapa skript för en grafisk anpassad inmatningsruta med hjälp .NET Framework microsofts funktioner för formulärskapande i Windows PowerShell 3.0 och senare versioner.

Skapa en anpassad, grafisk indataruta

Kopiera och klistra in följande i Windows PowerShell ISE och spara det sedan som ett Windows PowerShell skript (.ps1).

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please enter the information in the space below:'
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)

$form.Topmost = $true

$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}

Skriptet börjar med att läsa in .NET Framework klasser: System.Drawing och System.Windows. Formulär. Sedan startar du en ny instans av .NET Framework klassen System.Windows. Forms.Form; som innehåller ett tomt formulär eller fönster där du kan börja lägga till kontroller.

$form = New-Object System.Windows.Forms.Form

När du har skapat en instans av klassen Form tilldelar du värden till tre egenskaper för den här klassen.

  • Text. Detta blir fönstrets rubrik.

  • Storlek. Det här är formulärets storlek i bildpunkter. Föregående skript skapar ett formulär som är 300 bildpunkter brett och 200 bildpunkter högt.

  • StartingPosition. Den här valfria egenskapen är inställd på CenterScreen i föregående skript. Om du inte lägger till den här egenskapen Windows en plats när formuläret öppnas. Genom att ange StartingPosition till CenterScreen visas formuläret automatiskt i mitten av skärmen varje gång det läses in.

$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Skapa sedan en OK-knapp för formuläret. Ange storlek och beteende för knappen OK. I det här exemplet är knapppositionen 120 bildpunkter från formulärets övre kant och 75 bildpunkter från vänsterkanten. Knapphöjden är 23 bildpunkter, medan knapplängden är 75 bildpunkter. Skriptet använder fördefinierade Windows Forms-typer för att fastställa knappbeteenden.

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

På samma sätt skapar du en Avbryt-knapp. Knappen Avbryt är 120 bildpunkter uppifrån, men 150 bildpunkter från fönstrets vänstra kant.

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

Ange sedan etiketttext i fönstret som beskriver den information som du vill att användarna ska ange.

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please enter the information in the space below:'
$form.Controls.Add($label)

Lägg till kontrollen (i det här fallet en textruta) som låter användarna ange den information som du har beskrivit i etiketttexten. Det finns många andra kontroller som du kan använda förutom textrutor. Fler kontroller finns i System.Windows. Namnområde för formulär.

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)

Ange egenskapen Översta till $true att tvinga fönstret att öppna ovanpå andra öppna fönster och dialogrutor.

$form.Topmost = $true

Lägg sedan till den här kodraden för att aktivera formuläret och ställ in fokus på textrutan som du skapade.

$form.Add_Shown({$textBox.Select()})

Lägg till följande kodrad för att visa formuläret i Windows.

$result = $form.ShowDialog()

Slutligen instruerar koden i If-blocket Windows vad du ska göra med formuläret när användarna har uppsnat text i textrutan och klickar sedan på OK eller trycker på Retur.

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}

Se även