Skapa en grafisk datumväljare

Använd Windows PowerShell 3.0 och senare versioner för att skapa ett formulär med en grafisk kontroll i kalenderformat som låter användarna välja en dag i månaden.

Skapa en grafisk kontroll för datumväljare

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 Windows.Forms.Form -Property @{
    StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen
    Size          = New-Object Drawing.Size 243, 230
    Text          = 'Select a Date'
    Topmost       = $true
}

$calendar = New-Object Windows.Forms.MonthCalendar -Property @{
    ShowTodayCircle   = $false
    MaxSelectionCount = 1
}
$form.Controls.Add($calendar)

$okButton = New-Object Windows.Forms.Button -Property @{
    Location     = New-Object Drawing.Point 38, 165
    Size         = New-Object Drawing.Size 75, 23
    Text         = 'OK'
    DialogResult = [Windows.Forms.DialogResult]::OK
}
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

$cancelButton = New-Object Windows.Forms.Button -Property @{
    Location     = New-Object Drawing.Point 113, 165
    Size         = New-Object Drawing.Size 75, 23
    Text         = 'Cancel'
    DialogResult = [Windows.Forms.DialogResult]::Cancel
}
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

$result = $form.ShowDialog()

if ($result -eq [Windows.Forms.DialogResult]::OK) {
    $date = $calendar.SelectionStart
    Write-Host "Date selected: $($date.ToShortDateString())"
}

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-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 Windows.Forms.Form -Property @{
    StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen
    Size          = New-Object Drawing.Size 243, 230
    Text          = 'Select a Date'
    Topmost       = $true
}

I det här exemplet tilldelas värden till fyra egenskaper för den här klassen med hjälp av egenskapen Egenskap och hashtabellen.

  1. StartPosition: Om du inte lägger till den här egenskapen Windows en plats när formuläret öppnas. Genom att ange den här egenskapen till CenterScreen visar du automatiskt formuläret i mitten av skärmen varje gång det läses in.

  2. Storlek: Det här är formulärets storlek i bildpunkter. Föregående skript skapar ett formulär som är 243 bildpunkter brett med 230 bildpunkter högt.

  3. Text: Detta blir fönstrets rubrik.

  4. Längst upp: Genom att ange den här egenskapen till kan du tvinga $true fönstret att öppna ovanpå andra öppna fönster och dialogrutor.

Skapa sedan och lägg sedan till en kalenderkontroll i formuläret. I det här exemplet är den aktuella dagen inte markerad eller inringad. Användare kan bara välja en dag i kalendern i taget.

$calendar = New-Object Windows.Forms.MonthCalendar -Property @{
    ShowTodayCircle   = $false
    MaxSelectionCount = 1
}
$form.Controls.Add($calendar)

Skapa sedan en OK-knapp för formuläret. Ange storlek och beteende för knappen OK. I det här exemplet är knapppositionen 165 bildpunkter från formulärets övre kant och 38 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 Windows.Forms.Button -Property @{
    Location     = New-Object Drawing.Point 38, 165
    Size         = New-Object Drawing.Size 75, 23
    Text         = 'OK'
    DialogResult = [Windows.Forms.DialogResult]::OK
}
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

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

$cancelButton = New-Object Windows.Forms.Button -Property @{
    Location     = New-Object Drawing.Point 113, 165
    Size         = New-Object Drawing.Size 75, 23
    Text         = 'Cancel'
    DialogResult = [Windows.Forms.DialogResult]::Cancel
}
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

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

$result = $form.ShowDialog()

Slutligen instruerar koden inuti blocket Windows vad du ska göra med formuläret när användarna har valt en dag i kalendern och sedan klickar på OK eller trycker på if Retur. Windows PowerShell visar det valda datumet för användarna.

if ($result -eq [Windows.Forms.DialogResult]::OK) {
    $date = $calendar.SelectionStart
    Write-Host "Date selected: $($date.ToShortDateString())"
}

Se även