Création d'une zone d'entrée personnaliséeCreating a Custom Input Box

Dans Windows PowerShell 3.0 et versions ultérieures, utilisez les fonctionnalités de création de formulaires de Microsoft .NET Framework pour créer une zone d'entrée graphique personnalisée à l'aide d'un script.Script a graphical custom input box by using Microsoft .NET Framework form-building features in Windows PowerShell 3.0 and later releases.

Créer une zone d'entrée graphique personnaliséeCreate a custom, graphical input box

Copiez le code suivant, puis collez-le dans Windows PowerShell ISE. Ensuite, enregistrez-le en tant que script Windows PowerShell (.ps1).Copy and then paste the following into Windows PowerShell ISE, and then save it as a Windows PowerShell script (.ps1).

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please enter the information in the space below:'
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)

$form.Topmost = $true

$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}

Le script commence par charger deux classes .NET Framework : System.Drawing et System.Windows.Forms.The script begins by loading two .NET Framework classes: System.Drawing and System.Windows.Forms. Démarrez ensuite une nouvelle instance de la classe .NET Framework System.Windows.Forms.Form. Celle-ci affiche une fenêtre ou un formulaire vide où vous pouvez commencer à ajouter des contrôles.You then start a new instance of the .NET Framework class System.Windows.Forms.Form; that provides a blank form or window to which you can start adding controls.

$form = New-Object System.Windows.Forms.Form

Après avoir créé une instance de la classe Form, affectez des valeurs à trois propriétés de cette classe.After you create an instance of the Form class, assign values to three properties of this class.

  • Text.Text. Il s'agit du titre de la fenêtre.This becomes the title of the window.

  • Size.Size. Il s'agit de la taille du formulaire en pixels.This is the size of the form, in pixels. Le script précédent crée un formulaire de 300 pixels de largeur par 200 pixels de hauteur.The preceding script creates a form that’s 300 pixels wide by 200 pixels tall.

  • StartingPosition.StartingPosition. Cette propriété facultative a la valeur CenterScreen dans le script précédent.This optional property is set to CenterScreen in the preceding script. Si vous n'ajoutez pas cette propriété, Windows sélectionne un emplacement quand le formulaire est ouvert.If you don’t add this property, Windows selects a location when the form is opened. Si vous affectez à StartingPosition la valeur CenterScreen, le formulaire s’affiche automatiquement au milieu de l’écran à chaque chargement.By setting the StartingPosition to CenterScreen, you’re automatically displaying the form in the middle of the screen each time it loads.

$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Ensuite, créez un bouton OK dans votre formulaire.Next, create an OK button for your form. Spécifiez la taille et le comportement du bouton OK.Specify the size and behavior of the OK button. Dans cet exemple, le bouton se trouve à 120 pixels du bord supérieur du formulaire et à 75 pixels du bord gauche.In this example, the button position is 120 pixels from the form’s top edge, and 75 pixels from the left edge. Le bouton mesure 23 pixels de haut et 75 pixels de long.The button height is 23 pixels, while the button length is 75 pixels. Le script utilise des types Windows Forms prédéfinis pour déterminer le comportement du bouton.The script uses predefined Windows Forms types to determine the button behaviors.

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

De la même façon, créez un bouton Annuler.Similarly, you create a Cancel button. Le bouton Annuler se trouve à 120 pixels du bord supérieur de la fenêtre, mais à 150 pixels du bord gauche.The Cancel button is 120 pixels from the top, but 150 pixels from the left edge of the window.

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

Ensuite, entrez le texte d'étiquette décrivant les informations que doivent fournir les utilisateurs dans la fenêtre.Next, provide label text on your window that describes the information you want users to provide.

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please enter the information in the space below:'
$form.Controls.Add($label)

Ajoutez le contrôle (dans ce cas, une zone de texte) qui permet aux utilisateurs de fournir les informations que vous avez décrites dans votre texte d'étiquette.Add the control (in this case, a text box) that lets users provide the information you’ve described in your label text. Hormis les zones de texte, vous pouvez appliquer de nombreux autres contrôles. Pour plus de contrôles, voir Espace de noms System.Windows.Forms sur MSDN.There are many other controls you can apply besides text boxes; for more controls, see System.Windows.Forms Namespace on MSDN.

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)

Affectez à la propriété Topmost la valeur $true pour forcer la fenêtre à s’ouvrir au-dessus des autres fenêtres et boîtes de dialogue.Set the Topmost property to $true to force the window to open atop other open windows and dialog boxes.

$form.Topmost = $true

Ensuite, ajoutez cette ligne de code pour activer le formulaire et définissez le focus sur la zone de texte que vous avez créée.Next, add this line of code to activate the form, and set the focus to the text box that you created.

$form.Add_Shown({$textBox.Select()})

Ajoutez la ligne de code suivante pour afficher le formulaire dans Windows.Add the following line of code to display the form in Windows.

$result = $form.ShowDialog()

Enfin, le code à l’intérieur du bloc If indique à Windows comment traiter le formulaire quand un utilisateur entre du texte dans la zone de texte, puis clique sur le bouton OK ou appuie sur la touche Entrée.Finally, the code inside the If block instructs Windows what to do with the form after users provide text in the text box, and then click the OK button or press the Enter key.

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}

Voir aussiSee Also