I am clearing a combo box using $cboTarget.Items.Clear(). After the items are cleared “Add_SelectionChanged” is triggered but it shouldn’t be, it should only be triggered after an item is selected from the combo box. I’m I using “Items.Clear” incorrectly? Thanks for your help.
This is the error I’m getting which is understandable if there is nothing to select.
You cannot call a method on a null-valued expression.
At C:\UCM\UCM.ps1:79 char:1
- $targetSelect = ($cboTarget.SelectedItem.toString())
-
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
This is my code:
$global:UCM= @{ configDir = "C:" + "\UCM" labDir = "" configList = @() configSelection = "" targetList = @() allTargets = "All Targets" IPlookup=@{} #----------------------------------------------------------------------------------------------------- getConfigList = { param ($lab) # Get the list of available configurations $global:UCM.labDir = $global:UCM.configDir + "\" + $lab # Creates a list of folders in directory $global:UCM.configList = Get-ChildItem $global:UCM.labDir | foreach {$_.name} #Fill combo box with use cases (i.e. list of folder names in labDir) $UseCaseItems = $global:UCM.configList ForEach ($UseCaseItem in $UseCaseItems) { $cboUseCase.items.add($UseCaseItem) } } #----------------------------------------------------------------------------------------------------- setConfigSelection = { param ($selection) $cboTarget.Items.Clear() # Clear target list before selecting UseCase #Selected Use Case $global:UCM.configSelection = $selection &$global:UCM.getTargetList -config $global:UCM.configSelection } #----------------------------------------------------------------------------------------------------- getTargetList = { param ($config) # Get the list of available use case targets Write-Host "UCM: Target List:" -ForegroundColor Magenta $targetFile = $global:UCM.labDir $targetFile += "\$config\UCM-Targets.xml" write-debug "targetFile: $targetFile" $targetFile = [xml](Get-Content $targetFile) $global:UCM.IPlookup =@{} $targetFile.Deployment.Target | Foreach { write-host "hostname: " + $_.hostname write-host "IP: " + $_.IP $global:UCM.IPlookup.Add($_.hostname, $_.IP) } Write-Host $global:UCM.targetList #Fill combo box with target hostnames #Add "All Targets" first $cboTarget.items.Add($global:UCM.allTargets) #Add remaining targets in IPlookup hash table $TargetItems = $global:UCM.IPlookup.keys ForEach ($TargetItem in $TargetItems) { $cboTarget.items.add($TargetItem) } } } # Select Use Case $cboUseCase.Add_SelectionChanged({ $configSelect = ($cboUseCase.SelectedItem.toString()) &$global:UCM.setConfigSelection -selection $configSelect }) # Select Target $cboTarget.Add_SelectionChanged({ $targetSelect = ($cboTarget.SelectedItem.toString()) }) &$global:UCM.getConfigList -lab "MY-Lab"