.net 删除多个选定的整数时请提供帮助

.net 删除多个选定的整数时请提供帮助,.net,vb.net,visual-studio,.net,Vb.net,Visual Studio,好的,我在一个函数中向两个列表框添加项,一个用于普通纯文本,另一个用于MD5哈希 PasswordList.Items.Add(Password.Text) MD5ListBox.Items.Add(MD5.Text) 一切都进行得很成功,纯文本和MD5哈希都完美地添加到了列表框中,但是当删除我在密码列表中删除的相同索引时,我也想删除MD5列表中的索引。从功能上讲,当我删除一个Seleceted项时,这是完全正确的,但是当我删除密码列表中的多个Seleceted项时,我从MD5

好的,我在一个函数中向两个列表框添加项,一个用于普通纯文本,另一个用于MD5哈希

    PasswordList.Items.Add(Password.Text)
    MD5ListBox.Items.Add(MD5.Text)
一切都进行得很成功,纯文本和MD5哈希都完美地添加到了列表框中,但是当删除我在密码列表中删除的相同索引时,我也想删除MD5列表中的索引。从功能上讲,当我删除一个Seleceted项时,这是完全正确的,但是当我删除密码列表中的多个Seleceted项时,我从MD5List中删除时会出错

我基本上是在密码列表中获取所选索引,使用循环删除在密码列表中选择的相同索引整数,在MD5列表中删除

    If PasswordList.SelectedItems.Count = 1 Then

        Dim KeyNumber As Integer = PasswordList.SelectedIndices(0)

        MD5ListBox.Items.RemoveAt(KeyNumber)

        PasswordList.Items.Remove(PasswordList.SelectedItem)

    Elseif PasswordList.SelectedItems.Count > 1

        Dim KeyNumber5 = rdpForm.PasswordList.SelectedIndices

        For Each indx5 As Integer In KeyNumber5

            rdpForm.MD5ListBox.Items.RemoveAt(indx5)

        Next

        Dim selectedItems = (From I In rdpForm.PasswordList.SelectedItems).ToList

        For Each selectedItem In selectedItems

            rdpForm.PasswordList.Items.Remove(selectedItem)

        Next

   End If
删除MD5List中的索引时总是会出错,但下面是一个示例

错误:System.ArgumentOutOfRangeException:'InvalidArgument=值'21'对'index'无效。 参数名称:索引'
列表框(40)中的项目,试图删除索引(2-39)

如果您想坚持在每个列表中使用不同的项目,我建议您这样做:

Dim index=PasswordList.SelectedIndices.Cast(整数的)().Reverse().ToArray()
对于索引中的每个索引
PasswordList.Items.RemoveAt(索引)
MD5ListBox.Items.RemoveAt(索引)
下一个
第一行创建一个数组,其中包含要从每个列表中删除的项的索引。该数组完全独立于两个
列表框
,因此它不受对任一列表所做任何更改的影响

数组也是按降序排列的。这意味着,如果您按顺序删除这些索引中的项,其余项将不受该更改的影响。删除项目时,所有后续项目的索引将递减1。这意味着通过索引升序删除项目是有问题的。通过索引降序删除它们可以避免任何问题

话虽如此,你真的不应该删除这样的项目,因为你不应该像一开始那样添加它们。您应该为每个密码和MD5对创建一个对象,将这些对象添加到一个列表中,然后将该列表绑定到两个
列表框中。然后,只需从该列表中删除一个项目,两个
列表框都将受到影响

公共类密码数据
作为字符串的公共属性密码
公共属性MD5Hash作为字符串
末级
Private只读密码数据作为新的绑定列表(密码数据)
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
passwordDataBindingSource.DataSource=PasswordDataSource
passwordListBox.DisplayMember=“密码”
passwordListBox.DataSource=passwordDataBindingSource
md5HashListBox.DisplayMember=“MD5Hash”
md5HashListBox.DataSource=passwordDataBindingSource
端接头
私有子AddPassword()
添加(使用{.Password=passwordTextBox.Text,
.MD5Hash=md5hashTextBox.Text})
端接头
然后,您可以在一个
列表框
中获取所选的项目,它覆盖了两个列表中的数据,因此您只需从一个列表中删除这些项目,两个
列表框
都将受到影响:

Dim selectedItems=passwordListBox.selectedItems.Cast(密码数据的)(.ToArray)()
对于selectedItems中的每个selectedItem
passwordDatas.Remove(选择编辑项)
下一个

因为只有一个列表,您可以直接处理项目,而不是它们的索引,因此无需颠倒数组的顺序。

我支持Caius Jard的动议。你的文章很难阅读,因为你使用了标题。如果你让我们很难帮助你,你就不太可能得到你想要的帮助。