Creazione di una casella di input personalizzata

Questo esempio si applica solo alle piattaforme Windows.

Creare uno script di una casella di input grafica personalizzata usando le funzionalità di compilazione di moduli di Microsoft .NET Framework in Windows PowerShell 3.0 e versioni successive.

Creare una casella di input grafica personalizzata

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

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 System.Windows.Forms.Form. Fornisce una maschera o una finestra vuota a cui è possibile iniziare ad aggiungere controlli.

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

Dopo aver creato un'istanza della classe Form, assegnare valori alle tre proprietà della classe.

  • Text. Questo valore diventa il titolo della finestra.
  • Dimensioni. Le dimensioni del modulo, in pixel. Lo script precedente crea un modulo di 300 pixel in larghezza per 200 pixel in altezza.
  • StartingPosition. Questa proprietà facoltativa è impostata su CenterScreen nello script precedente. Se non viene aggiunta, Windows seleziona una posizione all'apertura del modulo. Impostando StartingPosition su CenterScreen, il modulo viene automaticamente visualizzato al centro dello schermo ogni volta che viene caricato.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

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 120 pixel dal bordo superiore del modulo e di 75 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 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)

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

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

Fornire quindi il testo di un'etichetta nella finestra che descrive le informazioni che gli utenti dovranno specificare.

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

Aggiungere il controllo, in questo caso una casella di testo, che consente agli utenti di specificare le informazioni descritte nel testo dell'etichetta. Sono disponibili molti altri controlli che è possibile applicare oltre alle caselle di testo. Per altri controlli, vedere Spazio dei nomi System.Windows.Forms.

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

Impostare la proprietà Topmost su $true per forzare l'apertura della finestra sopra altre finestre e finestre di dialogo aperte.

$form.Topmost = $true

Aggiungere quindi questa riga di codice per attivare il modulo e impostare lo stato attivo sulla casella di testo creata.

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

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 immette testo nella casella e quindi fa clic su OK o preme INVIO.

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

Vedi anche