DialogBoxes.psm1
class DialogBoxesOptionModel { $InputMessage $InputType DialogBoxesOptionModel($message, $inputType) { $this.InputMessage = $message $this.InputType = $inputType } } function Get-NewDialogBoxesOptionsList() { return New-Object 'System.Collections.Generic.List[DialogBoxesOptionModel]' } function Get-NewDialogBoxesOptionModel() { param ( $InputMessage, $InputType ) return [DialogBoxesOptionModel]::new($InputMessage, $InputType) } function Show-Alert { param( [Parameter(Mandatory = $true)] [string] $Message ) Add-Type -AssemblyName PresentationFramework $result = [System.Windows.MessageBox]::Show($Message, "Prompt", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning, [System.Windows.MessageBoxResult]::OK, [System.Windows.MessageBoxOptions]::DefaultDesktopOnly ) return $result; } function Get-UserInput { param ( [Parameter(Mandatory = $true)] [string] $Message ) Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $form = New-Object System.Windows.Forms.Form $form.Text = $Message $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 = $Message $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 return $x; } return $null; } function Get-UserInputMultiple { param ( [Parameter(Mandatory = $true)]$Messages ) Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $incrment = 20; $gap = 50; $labelToInputGap = 30; $textBoxSize = 5; $labelWidth = 280 $leftPadding = 10; $labelLocation = $incrment; $inputLocation = $incrment + $labelToInputGap $formYLen = ($Messages.Count * (( $textBoxSize * 2) + $labelToInputGap + $incrment )) + 250 # ( $labelToInputGap + $textBoxSize + $textBoxSize + $gap + $incrment )) if ($Messages.Count -ge 11) { $formYLen += 100 } $formXLen = $labelWidth + ($leftPadding * 4) $form = New-Object System.Windows.Forms.Form $form.Text = $Message $form.Size = New-Object System.Drawing.Size($formXLen, $formYLen) $form.StartPosition = 'CenterScreen' $form.Topmost = $true foreach ($message in $Messages) { $label = New-Object System.Windows.Forms.Label $label.Location = New-Object System.Drawing.Point($leftPadding, $labelLocation) $label.Size = New-Object System.Drawing.Size($labelWidth, (( $textBoxSize * 2) + $labelToInputGap + $incrment )) $label.Text = $message $textBox = New-Object System.Windows.Forms.TextBox $textBox.Location = New-Object System.Drawing.Point(0, ($incrment + $textBoxSize)) $textBox.Size = New-Object System.Drawing.Size($labelWidth, $textBoxSize ) $label.Controls.Add($textBox); $form.Controls.Add($label); $labelLocation += $incrment + $gap $inputLocation += $incrment + $gap } $okButton = New-Object System.Windows.Forms.Button $okButton.Location = New-Object System.Drawing.Point(75, $inputLocation) $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(175, $inputLocation) $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) $form.Add_Shown({ $textBox.Select() }) $result = $form.ShowDialog() $values = New-Object System.Collections.Generic.List[string] if ($result -eq [System.Windows.Forms.DialogResult]::OK) { $vals = $form.Controls | Where-Object { $_.HasChildren -eq $true } foreach ($v in $vals) { $values.Add($v.Controls[0].Text); } return $values } return $null; } <# .SYNOPSIS Pass in an array of Messages and Input types to create those fields in a dialog box. .DESCRIPTION At the current time, only accepts check boxes and Text boxes. . .NOTES Use the DialogBoxesOptionModel to create the fields and boxes. Types are CheckBox AND TextBox .EXAMPLE $list = New-Object 'System.Collections.Generic.List[DialogBoxesOptionModel]' $model = [DialogBoxesOptionModel]::new("Do you like chicken", "CheckBox") $list.Add($model); $m2 = [DialogBoxesOptionModel]::new("What is your Name?", "TextBox") $list.Add($m2) $result = Get-UserInputMultipleWithOptions -MessagesAndInputTypes $list.ToArray() Write-Host $result #> function Get-UserInputMultipleWithOption { param ( [Parameter(Mandatory = $true)][DialogBoxesOptionModel[]] $MessagesAndInputTypes ) $checkBox = "CheckBox" $textBox = "TextBox" Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $incrment = 20; $gap = 50; $labelToInputGap = 30; $textBoxSize = 5; $labelWidth = 280 $leftPadding = 10; $labelLocation = $incrment; $inputLocation = $incrment + $labelToInputGap $formYLen = ($Messages.Count * (( $textBoxSize * 2) + $labelToInputGap + $incrment )) + 250 # ( $labelToInputGap + $textBoxSize + $textBoxSize + $gap + $incrment )) if ($Messages.Count -ge 11) { $formYLen += 100 } $formXLen = $labelWidth + ($leftPadding * 4) $form = New-Object System.Windows.Forms.Form $form.Text = $Message $form.Size = New-Object System.Drawing.Size($formXLen, $formYLen) $form.StartPosition = 'CenterScreen' $form.Topmost = $true foreach ($message in $MessagesAndInputTypes) { $label = New-Object System.Windows.Forms.Label $label.Location = New-Object System.Drawing.Point($leftPadding, $labelLocation) $label.Size = New-Object System.Drawing.Size($labelWidth, (( $textBoxSize * 2) + $labelToInputGap + $incrment )) $label.Text = $message.InputMessage if ($message.InputType -eq $textBox) { $inputBox = New-Object System.Windows.Forms.TextBox $inputBox.Location = New-Object System.Drawing.Point(0, ($incrment + $textBoxSize)) } elseif ($message.InputType -eq $checkBox) { $inputBox = New-Object System.Windows.Forms.CheckBox $inputBox.Location = New-Object System.Drawing.Point(0, ($incrment + $textBoxSize)) } $inputBox.Size = New-Object System.Drawing.Size($labelWidth, $textBoxSize ) $label.Controls.Add($inputBox); $form.Controls.Add($label); $labelLocation += $incrment + $gap $inputLocation += $incrment + $gap } $okButton = New-Object System.Windows.Forms.Button $okButton.Location = New-Object System.Drawing.Point(75, $inputLocation) $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(175, $inputLocation) $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) $form.Add_Shown({ $inputBox.Select() }) $result = $form.ShowDialog() $values = New-Object System.Collections.Generic.List[string] if ($result -eq [System.Windows.Forms.DialogResult]::OK) { $vals = $form.Controls | Where-Object { $_.HasChildren -eq $true } foreach ($v in $vals) { $control = $v.Controls[0] $type = $control.GetType().Name; if ($type -eq $checkBox) { $values.Add($control.Checked) } else { $values.Add($control.Text); } } return $values } return $null; } function Get-FolderPathDialog { param ( [string] $HelpText = "Please select folder.", [string] $InitialFolder = "MyComputer" ) Add-Type -AssemblyName System.Windows.Forms $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog $FolderBrowser.RootFolder = $InitialFolder $FolderBrowser.Description = $HelpText1 $result = $FolderBrowser.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true; Name = $HelpText })) if ($result -eq [Windows.Forms.DialogResult]::OK) { return $FolderBrowser.SelectedPath } else { Show-Alert -Message "Folder path was canceled." exit; } } function Get-FolderPathDialogV2 { param ( [string] $HelpText = "Please select folder.", [string] $InitialFolder = "MyComputer" ) Add-Type -AssemblyName System.Windows.Forms $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog $FolderBrowser.RootFolder = $InitialFolder $FolderBrowser.Description = $HelpText1 $result = $FolderBrowser.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true; Name = $HelpText })) if ($result -eq [Windows.Forms.DialogResult]::OK) { return ($true, $FolderBrowser.SelectedPath) } else { Show-Alert -Message "Folder path was canceled." return ($false, "") } } function Get-FileDialog { param ( [string] $FileTypeFilter = "", [string] $HelpText = "Please select file." ) Add-Type -AssemblyName System.Windows.Forms $fileBrowser = New-Object System.Windows.Forms.OpenFileDialog $fileBrowser.Title = $HelpText $fileBrowser.Filter = $FileTypeFilter $fileBrowser.Multiselect = $false $fileBrowser.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true; Name = $HelpText })) | Out-Null return $fileBrowser.FileName } function Show-ConfirmationBox { param( [Parameter(Mandatory = $true)][string] $Message, [Parameter(Mandatory = $true)][string] $Title ) return [System.Windows.Forms.MessageBox]::Show($Message, $title, "YesNo", "Information", "Button1"); } #Export-ModuleMember -Function Get-UserInput #Export-ModuleMember -Function Show-Alert #Export-ModuleMember -Function Get-FolderPathDialog |