Bonjour,

J'aimerai récupérer 2 dates choisies par l'utilisateur via un calendrier GUI

J'ai donc crée un module avec une fonction qui prend des objets Windows.Forms.Form, Windows.Forms.MonthCalendar et Windows.Forms.Button en paramètre afin de créer un calendrier avec un certain nombre de paramètre :

calendar.psm1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

function NewCalendarBis($form, $calendar, $okButton, $cancelButton){
        $form.StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen
        $form.Size          = New-Object Drawing.Size 243, 230
        $form.Text          = 'Select a Date'
        $form.Topmost       = $true

        $calendar.ShowTodayCircle   = $false
        $calendar.MaxSelectionCount = 2

    $form.Controls.Add($calendar)

        $okButton.Location     = New-Object Drawing.Point 38, 165
        $okButton.Size         = New-Object Drawing.Size 75, 23
        $okButton.Text         = 'OK'
        $okButton.DialogResult = [Windows.Forms.DialogResult]::OK

    $form.AcceptButton = $okButton
    $form.Controls.Add($okButton)

        $cancelButton.Location     = New-Object Drawing.Point 113, 165
        $cancelButton.Size         = New-Object Drawing.Size 75, 23
        $cancelButton.Text         = 'Cancel'
        $cancelButton.DialogResult = [Windows.Forms.DialogResult]::Cancel

    $form.CancelButton = $cancelButton
    $form.Controls.Add($cancelButton)

    return $form

}
Et dans mon script, je crée les différents objets que je passe ensuite à cette fonction pour obtenir 2 calendriers et pouvoir les afficher successivement (pour la sélection d'une date de début puis une date de fin).

Script.ps1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Import-Module C:\Scripts\calendarbis.psm1

$form2 = New-Object Windows.Forms.Form
$form1 = New-Object Windows.Forms.Form
$calendar2 = New-Object Windows.Forms.MonthCalendar
$calendar1 = New-Object Windows.Forms.MonthCalendar
$okButton2 = New-Object Windows.Forms.Button
$okButton1 = New-Object Windows.Forms.Button
$cancelButton2 = New-Object Windows.Forms.Button
$cancelButton1 = New-Object Windows.Forms.Button

$calendrierForm2 = NewCalendar $form2 $calendar2 $okButton2 $cancelButton2
$calendrierForm1 = NewCalendar $form1 $calendar1 $okButton1 $cancelButton1

$res2 = $calendrierForm2.ShowDialog()
if ($res2 -eq [Windows.Forms.DialogResult]::OK) {
    $date2 = $calendar2.SelectionStart
    Write-Host "Date selected: $($date2.ToShortDateString())"
}

$res1 = $calendrierForm1.ShowDialog()
if ($res1 -eq [Windows.Forms.DialogResult]::OK) {
    $date1 = $calendar1.SelectionStart
    Write-Host "Date selected: $($date1.ToShortDateString())"
}
La chose bizarre que je ne comprends pas, c'est qu'après la première fois où j'ai exécuté le script (Powershell ISE), la date que m'affiche les Write-Host reste toujours la même à chaque fois que je ré-exécute le script (peu importe le jour cliqué dans le calendrier). En plus de cela, même la première fois que j'ai exécuté le script, il m'a affiché 2 fois la même date alors que j'avais sélectionné 2 dates différentes pour les 2 calendriers.

Merci d'avance pour votre aide sur ce sujet