以编程方式从列表框中添加删除项

问题描述 投票:0回答:1

我有三个列表框。我们称它们为listbox 2, 3 and 4

Listbox 2通过按钮单击事件获取计算机。然后,我创建了>><<按钮在23之间移动它们。现在,当我从3中选择多台计算机并单击另一个名为check的按钮时–它应检查在3中选择的服务器是否可ping通,如果ping成功,则将它们移至4。同时将它们从3中删除。无法ping的应退回3

我不断得到

此枚举器绑定到的列表已被修改。如果列表不变,则只能使用枚举器。

这是我的代码:$ buttonCheckStatus_Click = {$ CheckedServerS = $ listbox3.SelectedItemsforeach($ CheckedServerS中的$ CheckedServer){

            If (!(Test-Connection -Cn $CheckedServer -BufferSize 16 -Count 1 -ea 0 -quiet) -eq $true)
            {
                $cSrvr = $CheckedServer
                $listbox4.BeginUpdate()
                foreach($s in $cSrvr)
                {
                    $listbox4.Items.Add($s)--->*****
                }
                $listbox4.EndUpdate()
            }
            elseif(!(Test-Connection -Cn $CheckedServer -BufferSize 16 -Count 1 -ea 0 -quiet) -eq $false)
            {
                [void][System.Windows.Forms.MessageBox]::Show("Server $CServers needs Reboot","msg2")
            }
        }
    }

上面的方法工作正常,但是我在列表框3中获得了可ping通到列表框4的服务器,但是:只要在$listbox3.SelectedItems.remove()下方(在$listbox4.Items.Add($s)上方标记)添加----> *****,就会开始发生错误。] >

阅读了一些帖子后,我发现我不能使用foreach。这就像在吃蛋糕一样。但是我不知道该如何实现。

我有三个列表框。让我们将其称为列表框2、3和4。列表框2通过按钮单击事件获取计算机。然后,我创建了>>和<

它正在抱怨该语句,因为您仍在枚举listbox3.SelectedItems。处理该问题的一种方法可能是记录需要在数组中删除的内容,一旦退出循环(将它们添加到listbox4),请枚举该数组并从listbox3中删除项目。

因此添加

$Pingable=@()

开始循环之前。验证服务器并将其添加到listbox4之后,将服务器添加到循环中的该阵列中

$Pingable +=$s 

一旦完成整个循环;枚举数组并将其删除

foreach ($p in $Pingable) { $listbox3.Items.remove($p) }

在您的代码中:

$Pingable=@()
$buttonCheckStatus_Click={ $CheckedServerS=$listbox3.SelectedItems foreach ($CheckedServer in $CheckedServerS) {

            If (!(Test-Connection -Cn $CheckedServer -BufferSize 16 -Count 1 -ea 0 -quiet) -eq $true)
            {
                $cSrvr = $CheckedServer
                $listbox4.BeginUpdate()
                foreach($s in $cSrvr)
                {
                    $listbox4.Items.Add($s)
                    $Pingable +=$s
                }
                $listbox4.EndUpdate()
            }
            elseif(!(Test-Connection -Cn $CheckedServer -BufferSize 16 -Count 1 -ea 0 -quiet) -eq $false)
            {
                [void][System.Windows.Forms.MessageBox]::Show("Server $CServers needs Reboot","msg2")
            }
        }
    }

foreach ($p in $Pingable) { $listbox3.Items.remove($p) }
powershell user-interface listbox
1个回答
0
投票

它正在抱怨该语句,因为您仍在枚举listbox3.SelectedItems。处理该问题的一种方法可能是记录需要在数组中删除的内容,一旦退出循环(将它们添加到listbox4),请枚举该数组并从listbox3中删除项目。

© www.soinside.com 2019 - 2024. All rights reserved.