Skapa en grafisk datumväljare

Det här exemplet gäller endast för Windows-plattformar.

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 date-picker-kontroll

Kopiera och klistra sedan in följande i Windows PowerShell ISE och spara det sedan som en PowerShell-skriptfil (.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 två .NET Framework-klasser: System.Drawing och System.Windows.Forms. Sedan startar du en ny instans av .NET Framework-klassen Windows.Forms.Form. Det ger 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
}

Det här exemplet tilldelar värden till fyra egenskaper för den här klassen med egenskapen Egenskap och hashtable.

  1. StartPosition: Om du inte lägger till den här egenskapen väljer Windows en plats när formuläret öppnas. Genom att ställa in den här egenskapen på CenterScreen visas formuläret automatiskt mitt på skärmen varje gång det läses in.

  2. Storlek: Det här är storleken på formuläret i bildpunkter. Föregående skript skapar ett formulär som är 243 bildpunkter brett och 230 bildpunkter högt.

  3. Text: Detta blir fönstrets rubrik.

  4. Längst upp: Genom att ställa in den här egenskapen på $truekan du tvinga fönstret att öppna ovanpå andra öppna fönster och dialogrutor.

Skapa 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 OK-knappen . I det här exemplet är knapppositionen 165 bildpunkter från formulärets övre kant och 38 bildpunkter från den vänstra kanten. 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 i if blocket Windows vad de ska göra med formuläret när användarna har valt en dag i kalendern och klickar sedan på OK-knappen eller trycker på returknappen . Windows PowerShell visar det valda datumet för användare.

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

Se även