Creazione di un controllo grafico di selezione data

Questo esempio si applica solo alle piattaforme Windows.

Usare Windows PowerShell 3.0 e versioni successive per creare un modulo con un controllo grafico di tipo calendario che consente agli utenti di selezionare un giorno del mese.

Creare un controllo grafico di selezione data

Copiare e quindi incollare il codice seguente in Windows PowerShell I edizione Standard e quindi salvarlo come file script di PowerShell (.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())"
}

Lo script inizia caricando due classi di .NET Framework: System.Drawing e System.Windows.Forms. Si avvia quindi una nuova istanza della classe .NET Framework Windows.Forms.Form. Fornisce una maschera o una finestra vuota a cui è possibile iniziare ad aggiungere controlli.

$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
}

In questo esempio vengono assegnati valori a quattro proprietà di questa classe usando la proprietà Property e la tabella hash.

  1. StartPosition: se non si aggiunge questa proprietà, Windows seleziona un percorso all'apertura del modulo. Impostando questa proprietà su CenterScreen, il modulo viene automaticamente visualizzato al centro dello schermo ogni volta che viene caricato.

  2. Dimensioni: dimensioni del form, in pixel. Lo script precedente crea un modulo di 243 pixel in larghezza per 230 pixel in altezza.

  3. Testo: diventa il titolo della finestra.

  4. In alto: impostando questa proprietà su $true, è possibile forzare la finestra ad aprire altre finestre aperte e finestre di dialogo.

Quindi creare e aggiungere un controllo calendario nel modulo. In questo esempio il giorno corrente non è evidenziato o cerchiato. Gli utenti possono selezionare un solo giorno del calendario alla volta.

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

Creare quindi un pulsante OK per il modulo. Specificare le dimensioni e il comportamento del pulsante OK. In questo esempio il pulsante è posizionato a una distanza di 165 pixel dal bordo superiore del modulo e di 38 pixel dal bordo sinistro. L'altezza del pulsante è di 23 pixel, mentre la lunghezza è di 75 pixel. Lo script usa i tipi predefiniti di Windows Form per determinare i comportamenti del pulsante.

$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)

Analogamente, creare un pulsante Cancel. Il pulsante Cancel è posizionato a 165 pixel di distanza dal bordo superiore, ma a 113 pixel dal bordo sinistro della finestra.

$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)

Aggiungere la riga di codice seguente per visualizzare il modulo in Windows.

$result = $form.ShowDialog()

Infine, il codice all'interno del blocco if indica a Windows cosa fare con il modulo dopo che l'utente seleziona un giorno del calendario e quindi fa clic su OK o preme INVIO. Windows PowerShell visualizza la data selezionata.

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

Vedi anche