Criar um seletor de datas gráfico

Este exemplo só se aplica a plataformas Windows.

Use o Windows PowerShell 3.0 e versões posteriores para criar um formulário com um controle gráfico no estilo de calendário que permite aos usuários selecionar um dia do mês.

Criar um controle gráfico de seletor de data

Copie e cole o seguinte no Windows PowerShell ISE e salve-o como um arquivo de script (.ps1) do PowerShell.

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())"
}

O script começa carregando duas classes do .NET Framework: System.Drawing e System.Windows.Forms. Em seguida, inicie uma nova instância da classe .NET Framework Windows.Forms.Form. Isso fornece um formulário em branco ou uma janela à qual você pode começar a adicionar controles.

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

Este exemplo atribui valores a quatro propriedades dessa classe usando a propriedade Property e hashtable.

  1. StartPosition: Se você não adicionar essa propriedade, o Windows selecionará um local quando o formulário for aberto. Ao definir essa propriedade como CenterScreen, você exibe automaticamente o formulário no meio da tela cada vez que ele é carregado.

  2. Tamanho: Este é o tamanho do formulário, em pixels. O script anterior cria um formulário com 243 pixels de largura por 230 pixels de altura.

  3. Texto: Este torna-se o título da janela.

  4. Topmost: Ao definir essa propriedade como $true, você pode forçar a janela a abrir sobre outras janelas e caixas de diálogo abertas.

Em seguida, crie e adicione um controle de calendário em seu formulário. Neste exemplo, o dia atual não é realçado ou circulado. Os usuários podem selecionar apenas um dia no calendário de cada vez.

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

Em seguida, crie um botão OK para o formulário. Especifique o tamanho e o comportamento do botão OK . Neste exemplo, a posição do botão é de 165 pixels da borda superior do formulário e 38 pixels da borda esquerda. A altura do botão é de 23 pixels, enquanto o comprimento do botão é de 75 pixels. O script usa tipos predefinidos do Windows Forms para determinar os comportamentos dos botões.

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

Da mesma forma, você cria um botão Cancelar . O botão Cancelar está a 165 pixels da parte superior, mas a 113 pixels da borda esquerda da janela.

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

Adicione a seguinte linha de código para exibir o formulário no Windows.

$result = $form.ShowDialog()

Finalmente, o código dentro do bloco instrui o if Windows sobre o que fazer com o formulário depois que os usuários selecionam um dia no calendário e, em seguida, clique no botão OK ou pressione a tecla Enter. O Windows PowerShell exibe a data selecionada para os usuários.

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

Consulte também