2014-08-26 4 views
1

У меня есть сценарий, в котором пользователь выбирает выбор из раскрывающегося списка. Но если пользователь ничего не выбирает, я получаю ошибку. Как установить значение по умолчанию, которое возвращается, даже если пользователь не вводит значение.Значение раскрывающегося списка Powershell по умолчанию

Вот скрипт

######################## 

# Edit This item to change the DropDown Values 

[array]$DropDownArray = "c", "d", "share" 

# This Function Returns the Selected Value and Closes the Form 

function Return-DropDown { 
$script:Choice = $DropDown.SelectedItem.ToString() 
$Form.Close() 
} 

function selectShare{ 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 


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

    $Form.width = 300 
    $Form.height = 150 
    $Form.Text = ”DropDown” 

    $DropDown = new-object System.Windows.Forms.ComboBox 
    $DropDown.Location = new-object System.Drawing.Size(100,10) 
    $DropDown.Size = new-object System.Drawing.Size(130,30) 

    ForEach ($Item in $DropDownArray) { 
    [void] $DropDown.Items.Add($Item) 
    } 

    $Form.Controls.Add($DropDown) 

    $DropDownLabel = new-object System.Windows.Forms.Label 
    $DropDownLabel.Location = new-object System.Drawing.Size(10,10) 
    $DropDownLabel.size = new-object System.Drawing.Size(100,40) 
    $DropDownLabel.Text = "Select shared folder to deploy SEP" 
    $Form.Controls.Add($DropDownLabel) 

    $Button = new-object System.Windows.Forms.Button 
    $Button.Location = new-object System.Drawing.Size(100,50) 
    $Button.Size = new-object System.Drawing.Size(100,20) 
    $Button.Text = "Select an Item" 
    $Button.Add_Click({Return-DropDown}) 
    $form.Controls.Add($Button) 

    $Form.Add_Shown({$Form.Activate()}) 
    [void] $Form.ShowDialog() 


    return $script:choice 
} 

$share = selectShare 
write-host $share 

А вот ошибка, если пользователь не выбирает из выпадающего

You cannot call a method on a null-valued expression. 
At D:\Script\comp.ps1:10 char:2 
+ $script:Choice = $DropDown.SelectedItem.ToString() 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

ответ

3

Почему бы не просто сделать:

$DropDown.SelectedItem = $DropDown.Items[0] 

, прежде чем показать форму? Или установите его = независимо от вашего элемента по умолчанию.

Редактировать: Или еще лучше настроить функцию проверки значений и вызвать это, когда они нажмут OK, чтобы убедиться, что все поля имеют допустимые значения.

0

Попробуйте это:

If ($DropDown.SelectedItem -ne $null)<br> 

И если $ null, установите другой выход.

1

Это, как я Пропустите эту ошибку:

[array]$DropDownArrayItems = "","Group1","Group2","Group3" 
[array]$DropDownArray = $DropDownArrayItems | sort 

# This Function Returns the Selected Value and Closes the Form 

function Return-DropDown { 
    if ($DropDown.SelectedItem -eq $null){ 
     $DropDown.SelectedItem = $DropDown.Items[0] 
     $script:Choice = $DropDown.SelectedItem.ToString() 
     $Form.Close() 
    } 
    else{ 
     $script:Choice = $DropDown.SelectedItem.ToString() 
     $Form.Close() 
    } 
} 

function SelectGroup{ 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 


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

    $Form.width = 300 
    $Form.height = 150 
    $Form.Text = ”DropDown” 

    $DropDown = new-object System.Windows.Forms.ComboBox 
    $DropDown.Location = new-object System.Drawing.Size(100,10) 
    $DropDown.Size = new-object System.Drawing.Size(130,30) 

    ForEach ($Item in $DropDownArray) { 
    [void] $DropDown.Items.Add($Item) 
    } 

    $Form.Controls.Add($DropDown) 

    $DropDownLabel = new-object System.Windows.Forms.Label 
    $DropDownLabel.Location = new-object System.Drawing.Size(10,10) 
    $DropDownLabel.size = new-object System.Drawing.Size(100,40) 
    $DropDownLabel.Text = "Select Group:" 
    $Form.Controls.Add($DropDownLabel) 

    $Button = new-object System.Windows.Forms.Button 
    $Button.Location = new-object System.Drawing.Size(100,50) 
    $Button.Size = new-object System.Drawing.Size(100,20) 
    $Button.Text = "Select an Item" 
    $Button.Add_Click({Return-DropDown}) 
    $form.Controls.Add($Button) 
    $form.ControlBox = $false 

    $Form.Add_Shown({$Form.Activate()}) 
    [void] $Form.ShowDialog() 


    return $script:choice 
} 

$Group = $null 
$Group = SelectGroup 
while ($Group -like ""){ 
    $Group = SelectGroup 
} 

Я также улучшение это падение вниз, как блок управления удалить, отсортировать массив по имени

Смежные вопросы